只是为了详细说明IEventAggregator 的使用 - 它为您提供了一个简单的 Pub/Sub 模型,用于在应用程序的解耦部分之间发送任意消息(即不需要知道任何其他部分)。因此,我们可以在 ViewModel 构造函数中获得对 IEventAggregator 的引用(框架会自动为您解析),即:
private IEventAggregator eventAggregator;
public PublisherViewModel(IEventAggregator eventAggregator)
{
this.eventAggregator = eventAggregator;
然后在我们的选择更改处理程序中,我们可以发布事件:
var changedEvt = eventAggregator.GetEvent<MyListboxChangedEvent>();
changedEvt.Publish(selectedItemId);
这依赖于我们的自定义事件类MyListboxChangedEvent:
public class MyListboxChangedEvent : CompositePresentationEvent<int> {}
所以最后,在响应这个动作的 ViewModel 中,我们设置了对事件的订阅,以及对应的处理方法:
public SubscriberViewModel(IEventAggregator eventAggregator)
{
var changedEvt = eventAggregator.GetEvent<MyListboxChangedEvent>();
changedEvt.Subscribe(OnListBoxChanged, ThreadOption.UIThread);
}
public void OnListBoxChanged(int selectionId)
{
// do whatever we need
}
看起来像很多胶水,但它成为将 UI 的不同部分连接在一起的合乎逻辑的方法,并且很快成为第二天性。