我们可以广播一个在其他课程中接收的对象

时间:2017-06-15 07:00:23

标签: c# .net wpf c#-4.0

我有一个名为 pendingData 的类,其中包含一个对象列表,并使用应用程序的开头进行实例化,并且只要应用程序运行,它就会保留。但我必须将添加对象更改为列表。如何在不在构造函数中传递对象的情况下访问其他视图中的对象?

那么,是否有广播方法或任何方式来做到这一点?

pendingData 类仅实例化一次。

1 个答案:

答案 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
};

如果您无法打开多个视图和/或不希望您的视图在打开后响应数据更改,那么这可能就足够了。但是,如果您希望您的视图实时响应数据,您可以对事件执行某些操作,以便一个视图可以告诉另一个视图数据已更改并且需要更新。