2010-03-23 36 views
0

在我的WPF應用程序中,我有一個給定ViewModel的View,並且在給定此View時,它將事件處理程序添加到ViewModel的PropertyChanged事件。當在GUI中發生某些操作時,我將刪除視圖並將另一個視圖添加到容器中 - 這個新視圖綁定到相同的ViewModel。取消訂閱事件處理程序的策略

發生這種情況後,舊的View仍然在ViewModel中處理PropertyChanged事件。我假設這是因爲視圖尚未被垃圾收集器收集,因此還活着?好 - 我需要它停下來。我的假設是我需要手動從ViewModel中分離事件處理程序?如何處理這個問題是否有最佳做法?

回答

2

也許訂閱視圖的Unloaded事件並在Unloaded事件處理程序中分離時會有一點清潔,它也不需要用戶調用Dispose()。

+0

謝謝!我喜歡這個解決方案比Dispose解決方案好得多。 – stiank81 2010-03-23 18:04:32

+0

來自MSDN:「由於用戶啓動的系統主題更改,可能會在控件上引發」Loaded and Unloaded「。另外,如果您決定分離元素並重新粘貼,該怎麼辦?你會記得重新配置事件嗎? – Zmaster 2011-10-25 11:31:36

2

我正在使用的策略是使View實現IDisposable,並使View的Dispose函數取消訂閱事件處理程序。然後,誰負責添加視圖需要先在舊視圖上調用Dispose()

工程就像一個魅力,但這是IDisposable的有效使用?

相關問題