在ViewModels与事件之间进行通信

use*_*794 2 c# wpf mvvm

我试图将我的孩子ViewModel中的事件传递回父母.子视图模型的视图是一个单独的窗口,我相信我无法传递构造函数参数.此视图上的按钮需要在父ViewModel上触发方法.

子ViewModel:

public ConnectViewModel(ConnectEvents connectEvents)
{
    ConnectEvents = connectEvents;
}
Run Code Online (Sandbox Code Playgroud)

父ViewModel

public MainWindowViewModel()
{
    ConnectEvents connectEvents = new ConnectEvents();
    ConnectViewModel = new ConnectViewModel(connectEvents);
    connectEvents.ThrowEvent += ConnectToServer;
}
Run Code Online (Sandbox Code Playgroud)

我怎么能在这两者之间进行交流?是否有更好的系统,或者我如何允许父母订阅孩子?

Moh*_*med 5

您可以制作自己的EventAggregator

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

 public static Action<string> OnMessageTransmitted;
}
Run Code Online (Sandbox Code Playgroud)

用法:

  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);
 }
}
Run Code Online (Sandbox Code Playgroud)

借助此功能,您可以与视图模型进行通信


stu*_*bax 5

你有很多选择.您可以使用自定义事件,您可以直接使用委托,您可以使用普通订阅或弱事件模式在您的父ViewModel中订阅PropertyChangedCollectionChanged事件.

我更喜欢最后一个,因为没有必要取消订阅.