只是为了详细说明IEventAggregator
的使用 - 它为您提供了一个简单的Pub/Sub模型,用于在应用程序的解耦(即不需要了解其他任何信息)之间发送任意消息。因此,我们可以得到我们的视图模型构造的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> {}
所以最后,这是为了响应这个动作视图模型,我们小号等一个订阅的情况下,和对应的处理程序方法:
public SubscriberViewModel(IEventAggregator eventAggregator)
{
var changedEvt = eventAggregator.GetEvent<MyListboxChangedEvent>();
changedEvt.Subscribe(OnListBoxChanged, ThreadOption.UIThread);
}
public void OnListBoxChanged(int selectionId)
{
// do whatever we need
}
好像大量的胶水,但它成为用于UI的不同部分布线在一起的逻辑方法,并且它很快变得第二性质。