2012-03-30 49 views
0

我想通過使用WPF和PRISM創建一個WPF應用程序。我也使用MEF和mvvm。有可能有2個可以通過使用事件聚合器相互通信的viewmodels?例如。在視圖模型A中發佈並在Viewmodel B中訂閱?如果是的話如何?我已經構建了一個包含多個視圖模型的程序,其中一些視圖模型應該可以相互通信,但是不管怎樣,如果我使用eventaggregator在Viewmodel A中發佈,視圖模型B中的subscribe將永遠不會被識別爲屬於同一個eventaggregator,因此我無法更新我的視圖連接到視圖模型B.PRISM MEF通過在wpf中使用Eventaggregator從viewmodel到viewmodel的通信

回答

0

唯一的可能性是ViewModel「B」未加載或尚未訂閱該事件。如果不是這樣,我建議你粘貼一些片段。

0

您是否使用WeakReference(弱訂閱)訂閱?如果是這樣,並且您的訂戶沒有在其他地方引用,則可能會在發佈事件之前收集垃圾並將其消失。

1

這是定義事件聚集

(1)創建事件此Agg ..

公共類YourEvent基本關鍵步驟:CompositePresentationEvent {

}

(2)發行商vm

eventAggregator.Get()。Publish(object);

(3)訂閱VM

YourEvent是eventObj = eventAggregator.Get();

if (subscriptionToken != null) 
    { 
     eventobj.Unsubscribe(subscriptionToken); 
    } 

    subscriptionToken = eventobj.Subscribe(YourEventHandler, ThreadOption.UIThread, false, yourfun); 
0

EventAggregator始終是相同的,您必須將它傳遞給每個Viewmodel。 棱鏡和MEF能爲你做到這一點:使用PRISM的統一

  1. 你可以在構造函數中加載EventAggregator

  2. 你可以用MEF

0

注入EventAggregator的參考你有ViewModel「B」和ViewModel「A」的實例嗎?您是否在訂閱代碼運行之前發佈了該事件?他們是否正在發佈/訂閱相同的事件?

EventAggregator.GetEvent(Of MyEventType).Subscribe(Sub() 

                End Sub) 
相關問題