【问题标题】:Updating another ViewModel on PropertyChanged of another ViewModel在另一个 ViewModel 的 PropertyChanged 上更新另一个 ViewModel
【发布时间】:2013-10-07 22:43:02
【问题描述】:

两个 ViewModel 对彼此一无所知,但我需要将一个 ViewModel 中已更改的新值发送到另一个 ViewModel 中的方法,我有什么选择?

您能否列出所有可能性以及最好的方法?

【问题讨论】:

  • 查看my answer 类似的问题。
  • @HighCore 是最好的事件聚合器?
  • 是的,如果您不想从一个 ViewModel 引用另一个 ViewModel。
  • 我会推荐一个事件聚合器。 @HighCore 链接到一个。一旦您知道要搜索什么,就会有许多示例。
  • 给我加一个。事件聚合器。

标签: c# wpf mvvm viewmodel inotifypropertychanged


【解决方案1】:

取自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);
   }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    相关资源
    最近更新 更多