试图了解卡利微EventAggregator
问题描述:
我明白怎么做在卡利微EventAggregator工作,但我不明白这一点:试图了解卡利微EventAggregator
让我们以此为例:
视图模型一个
private IEventAggregator _eventAggregator;
public ViewModelA(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator
_eventAggregator.PublishOnUIThread("Hello");
}
ViewModel B
private IEventAggregator _eventAggregator;
public ViewModelA(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator
_eventAggregator.Subscribe(this)
}
public void Handle(string message)
{
MessageBox.Show(message + " From ViewModel B")
}
ViewModel C
private IEventAggregator _eventAggregator;
public ViewModelA(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator
_eventAggregator.Subscribe(this)
}
public void Handle(string message)
{
MessageBox.Show(message + " From ViewModel C")
}
那么如何选择使用哪个viewmodel句柄来发布事件?
答
那么我怎么能选择使用哪个viewmodel句柄,当我发布事件?
几个视图模型可能订阅相同的消息。这是事件聚合的工作原理。发布者在不知道接收者数量的情况下发布单个消息。
如果你想要一个特定视图模型能够订阅事件,它应该实现IHandle<T>
intertface并调用Subscribe
方法上的事件聚合:
public class ViewModelA : IHandle<string>
{
private readonly IEventAggregator _eventAggregator;
public ViewModelA(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
_eventAggregator.Subscribe(this);
}
public void Handle(string message)
{
MessageBox.Show(message);
}
}
所有视图模型,这是否会接收消息。
您可以创建视图模型特定的消息类型,并让感兴趣的各方监听/处理这些类型的消息。 – Nkosi