我有一个名为 pendingData 的类,其中包含一个对象列表,并使用应用程序的开头进行实例化,并且只要应用程序运行,它就会保留。但我必须将添加对象更改为列表。如何在不在构造函数中传递对象的情况下访问其他视图中的对象?
那么,是否有广播方法或任何方式来做到这一点?
pendingData 类仅实例化一次。
答案 0 :(得分:1)
为了确保您只获得对象的一个实例,您可以使用{/ 3}这样的模式
public class Singleton
{
private static Singleton instance;
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
您会注意到构造函数是私有的,因此您必须通过Instance
方法获取实例。您还会注意到,该方法仅在对象不存在时才创建该对象的实例。
您可以对所有视图使用相同的Singleton
对象,因为它们知道它们是相同的,因此数据相同。
或者,你可以在一个中心位置声明它,也许是主窗口的viewmodel,然后其他所有东西都可以从那里访问它。
至于更新它,你可以将对象的引用传递给它所使用的每个地方,然后直接更新它。或者您可以使用singleton这样做
在视图的viewmodel
中public static event EventHandler MyEvent;
private void OnMyEvent()
{
if (MyEvent != null)
{
MyEvent(this, new EventArgs());
}
}
在数据对象所在的位置,也许是主窗口的视图模型
MyView.MyEvent += delegate
{
// Update your data
};
如果您无法打开多个视图和/或不希望您的视图在打开后响应数据更改,那么这可能就足够了。但是,如果您希望您的视图实时响应数据,您可以对事件执行某些操作,以便一个视图可以告诉另一个视图数据已更改并且需要更新。