在另一个ViewModel的PropertyChanged上更新另一个ViewModel

时间:2013-10-07 22:43:03

标签: c# wpf mvvm viewmodel inotifypropertychanged

两个ViewModel对彼此一无所知,但是我需要将在一个viewmodel中已更改的新值发送到另一个视图模型中的方法,我有哪些选择?

请列出所有可能性以及最佳方式?

1 个答案:

答案 0 :(得分:2)

取自this answer

如果你想要松散耦合的通信,你需要一个EventAggregator:

//Simplest EventAggregator
public static class DumbAggregator
{
    public static void BroadCast(string message)
    {
       if (OnMessageTransmitted != null)
           OnMessageTransmitted(message);
    }

    public static Action<string> OnMessageTransmitted;
}

用法:

public class MySender
{
   public void SendMessage()
   {
       DumbAggregator.BroadCast("Hello There!");
   }
}

public class MySubscriber
{
   public MySubscriber()
   {
       DumbAggregator.OnMessageTransmitted += OnMessageReceived;
   }

   private void OnMessageReceived(string message)
   {
      MessageBox.Show("I Received a Message! - " + message);
   }
}

但请注意,包含在MVVM框架(如Prism)中的EventAggregators要复杂得多,并且包含大量功能。这只是一个简单的例子。