2016-08-21 27 views
0

我在MainPageViewModel上的viewModel調用事件之一上有代碼。當我用「真」訂閱像EventAggregator在一個事件中被多次觸發

eventAggregator type.GetEvent<UpdateUserBooksEvent>().Subscribe(str => 
{ 
    GetUserBooks(); 
}, true); 

,然後移動幾次不同頁面之間,那麼當被調用這個事件,它觸發對MainPageViewModel幾次。 (也許MainPageVM創造了多次?)

如果我沒有「真正的」訂閱像

eventAggregator type.GetEvent<UpdateUserBooksEvent>().Subscribe(str => 
{ 
    GetUserBooks(); 
}); 

去上幾頁,那麼該事件不會觸發。 (也許MainPageVM被垃圾收集器清除?)。

如何使一個事件不能多次工作?或者在瀏覽遠至1-2頁之前解僱。

回答

0

true意味着keepSubscriberReferenceAlive - 即如果你通過你的true用戶將收到即使他應該現在已經死了的事件,因爲它不再被引用。這意味着,如果您發佈該活動,所有訂閱的訂閱者(包括true)都將收到該活動。如果您從視圖A導航到視圖B,並且每次新視圖模型B訂閱時,所有視圖模型B都將接收該事件。

如果您希望在不再活動的視圖模型上收到事件(並因此收集,除非您使用true訂閱),那麼您可能想在其他位置訂閱事件以對其作出反應(在服務中?)或根本不訂閱(一個收集的視圖模型不需要更新任何東西)。

+0

如何在UWP中實現服務,隨時可以從任何VM訪問服務? –

+0

將它註冊爲具有統一性(或您使用的任何容器)的單身人士,並將其作爲依賴項注入視圖模型中。 – Haukinger