我在我的第一個WPF4項目中使用MvvmLight 4.0/C#,並且仍然在學習MVVM/WPF索引,在那裏我發現很多以前的Windows窗體技能無效。是否調用MvvmLight viewmodel上的清理()取消所有消息
無論如何,我有viewmodelbase
Register
消息的視圖模型,同樣也有相同的觀點(註冊消息)的VM/VM和VM/V通信。所有關於清理的mvvmlight資源都表示我應該使用Unregister
消息來避免內存泄漏。
因此,當我使用視圖完成後,我只是在視圖/窗口的unload事件中調用Messenger.Default.Unregister(this)
。當我使用viewmodel
完成時,我只需在我的viewmodel
參考上調用viewmodelbase.Cleanup()
即可,假設基本實現將執行(全部)取消註冊。
我想知道是否只需調用viewmodel
上的Cleanup()
就足夠了,還是必須在每個視圖模型中重寫此方法,並且明確地從每個覆蓋內調用Unregister
。現在我創建/處理大部分我的視圖模型(不使用SimpleIOC/ServiceLocator),並且只關注清理中的所有消息。
我發現下面的SO標記已連接,但仍然沒有回答我的查詢,只是簡單地調用ViewModelBase.Cleanup()
與取消註冊相比,通過顯式重寫派生的viewmodel
中的方法。
Unregister(this) unregisters this instance from everything?
When and where to unregister messenger with mvvmlight
所以我得到的結論是,如果我調用清理()對我的派生viewmodels,使ViewModelBase。清理()被調用,我可以放心,我的所有實例都完全未從Messenger註冊,因此沒有任何內存泄漏的可能性。感謝所有的幫助。 –