我理解EventAggregator在卡利伯恩公司是如何工作的,但我不明白这一点:
让我们以这个为例:
ViewModel A
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")
}那么,在发布事件时,如何选择要使用的视图模型句柄呢?
发布于 2017-08-09 08:36:07
那么,在发布事件时,如何选择要使用的视图模型句柄呢?
几个视图模型可能订阅相同的消息。这就是事件聚合的工作方式。发布者发布一条消息,而不知道接收者的数量。
如果您希望特定的视图模型能够订阅一个事件,那么它应该实现IHandle<T>接口,并在事件聚合器上调用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);
}
}所有这样做的视图模型都将收到消息。
发布于 2020-04-24 20:31:21
我设法通过Message类向特定的视图模型发送消息:
public class Message<TTarget, TValue>
{
public TValue Value { get; set; }
public Message(TValue value)
{
Value = value;
}
}然后添加到类中。
IHandle<Message<ViewModel, string>>用法:
_eventAggregator.PublishOnUIThread(new Message<ViewModel, string>("Hello from ViewModel"));https://stackoverflow.com/questions/45578745
复制相似问题