试图了解卡利微EventAggregator

试图了解卡利微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句柄来发布事件?

+0

您可以创建视图模型特定的消息类型,并让感兴趣的各方监听/处理这些类型的消息。 – Nkosi

那么我怎么能选择使用哪个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); 
    } 
} 

所有视图模型,这是否会接收消息。