在 ASP.NET 中,我可以这样做Session["something"] = something;
,然后我可以在另一个页面中检索会话的值。WPF 中是否有允许我在 ASP.NET 中执行相同操作的会话?我注意到 WPF 中没有会话,因为有状态。因为我有很多用户控制页面,所以我需要获取它的值并将其显示在 MainWindow 上。
WPF中有没有类似Session的东西?
一些资源说要使用 cookie。我怎么做?我的 WPF 应用程序不是 WPF Web 应用程序吗?
如果我正确理解您的问题,您只需要某种全局存储来存储程序中的某些值。
您可以为需要存储的各种值创建一个具有公共静态属性的静态类,并且能够在应用程序内部进行全局访问。就像是:
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 的方法更好,因为您的属性将是强类型的,并且没有基于字符串的属性值查找。
一种可能性是使用:
Application.Current.Resources["something"] = something;
不过,我不会养成经常使用它的习惯。我认为它通常用于存储一次的数据(例如样式),然后仅从应用程序中的其他点引用。在你的应用程序中读取/写入一些全球共享的数据的所有内容都是不好的做法,并且可能会使调试变得困难。
在我看来,最好的方法是将它存储在应用程序的当前属性中,如下所示:
Application.Current.Properties["stuff"]
您可以存储任何类型的对象,但不要滥用它。
只有当我没有其他方式共享数据时,我才会亲自使用这种技巧(与格兰特温尼相同的建议)
我更喜欢使用资源进行翻译或图像和属性用于其他标志/数据,只是为了将事物分开一点
尝试以下操作:
System.Windows.Application.Current.Properties["Something"] = Something;
我在我的项目中多次使用这个,