17

在 ASP.NET 中,我可以这样做Session["something"] = something;,然后我可以在另一个页面中检索会话的值。WPF 中是否有允许我在 ASP.NET 中执行相同操作的会话?我注意到 WPF 中没有会话,因为有状态。因为我有很多用户控制页面,所以我需要获取它的值并将其显示在 MainWindow 上。

WPF中有没有类似Session的东西?

一些资源说要使用 cookie。我怎么做?我的 WPF 应用程序不是 WPF Web 应用程序吗?

4

4 回答 4

17

如果我正确理解您的问题,您只需要某种全局存储来存储程序中的某些值。

您可以为需要存储的各种值创建一个具有公共静态属性的静态类,并且能够在应用程序内部进行全局访问。就像是:

public static class Global
{
    private string s_sSomeProperty;

    static Globals ()
    {
        s_sSomeProperty = ...;
        ...
    }

    public static string SomeProperty
    {
        get
        {
            return ( s_sSomeProperty );
        }
        set
        {
            s_sSomeProperty = value;
        }
    }

    ...
}

这样,您就可以Global.SomeProperty在代码中Global可用类的任何地方编写。

当然,您需要验证并且 - 如果您的应用程序是多线程的 - 适当的锁定以确保您的全局(共享)数据在线程之间受到保护。

此解决方案比使用类似 session 的方法更好,因为您的属性将是强类型的,并且没有基于字符串的属性值查找。

于 2013-07-22T03:17:52.783 回答
8

一种可能性是使用:

Application.Current.Resources["something"] = something;

不过,我不会养成经常使用它的习惯。我认为它通常用于存储一次的数据(例如样式),然后仅从应用程序中的其他点引用。在你的应用程序中读取/写入一些全球共享的数据的所有内容都是不好的做法,并且可能会使调试变得困难。

于 2013-07-22T03:22:22.590 回答
1

在我看来,最好的方法是将它存储在应用程序的当前属性中,如下所示:

Application.Current.Properties["stuff"]

您可以存储任何类型的对象,但不要滥用它。

只有当我没有其他方式共享数据时,我才会亲自使用这种技巧(与格兰特温尼相同的建议)

我更喜欢使用资源进行翻译或图像和属性用于其他标志/数据,只是为了将事物分开一点

于 2018-03-01T08:58:14.983 回答
-1

尝试以下操作:

System.Windows.Application.Current.Properties["Something"] = Something;

我在我的项目中多次使用这个,

于 2018-09-21T07:33:40.447 回答