2016-08-24 75 views
1

我想要做的就是在不再需要ViewModel的時候退訂事件。我嘗試實現IDisposable,但沒有人調用Dispose(),而不是Xamarin.Forms和Prism.Forms。如何在使用Xamarin.Forms彈出頁面後處理ViewModel?

我們有一個使用Xamarin.Forms創建的應用程序。我們使用Prism.Forms來執行MVVM。在導航到新頁面時(推入堆棧),Prism.Forms將ViewModel連接到頁面。在返回時(從棧中彈出)ViewModel在一段時間後獲取GarbageCollected。

然而,問題是,在某個時間點,我們有幾個相同類型的ViewModels,對未綁定到View的事件進行預訂。當事件觸發所有這些ViewModel開始做他們的事情。所以我正在尋找一種方法來取消訂閱,不再需要訂閱。

有沒有人有解決方案?

回答

2

如果您想確保ViewModel不再存在於視圖中,您可以確保在視圖的OnDisappearing()事件中調用了Dispose()

如果您只關心訂閱和取消訂閱活動,則更好,然後在OnAppearing()OnDisappearing()中執行。在這種情況下,一旦查看不可見,您可以確定視圖模型中不存在事件處理程序。

+2

謝謝,我會嘗試。請注意,在調用諸如Dailer屏幕之類的意圖(Android上)時,Disappearing()也會被觸發。所以我必須再次訂閱Appearing()中的事件。 –