我试图将我的孩子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)
我怎么能在这两者之间进行交流?是否有更好的系统,或者我如何允许父母订阅孩子?
您可以制作自己的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)
借助此功能,您可以与视图模型进行通信
你有很多选择.您可以使用自定义事件,您可以直接使用委托,您可以使用普通订阅或弱事件模式在您的父ViewModel中订阅PropertyChanged或CollectionChanged事件.
我更喜欢最后一个,因为没有必要取消订阅.
| 归档时间: |
|
| 查看次数: |
3475 次 |
| 最近记录: |