只是爲了詳細說明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的不同部分佈線在一起的邏輯方法,並且它很快變得第二性質。