我相信你需要考慮精確什麼是負責創建你的意見和你的ViewModels,什麼是負責確定是否不是可以關閉與否等
它通常是一個好主意因爲無論什麼創造東西來摧毀它。因此,如果您的子窗口正在創建自定義用戶控件,它可能應該負責將其刪除。不過,我相信如果你的對象都沒有引用(或強大的事件訂閱),它應該最終被垃圾收集。您可以實現一個終結器/析構函數,並將Output.String輸出到輸出窗口,以查看最終可能發生的時間。一個好的內存分析器也可能是一個好主意。但是,您也可能需要更精確地控制ViewModel何時關閉。
很難確切地說出您的情況會發生什麼,因爲它確實取決於您的確切和特定的設置。讓我向你描述一下我的應用程序中的場景。我有幾個視圖顯示在標籤頁中。標籤頁有一個X按鈕來關閉標籤,我的視圖包含一個託管的Windows窗體控件,它需要調用.Dispose()來清理資源,並且需要知道何時取消訂閱複合命令文件菜單系統。所以,最初,我有一個問題...當標籤頁刪除視圖時,我的ViewModel如何取消訂閱命令? WPF控件中包含的視圖如何知道它何時被刪除?這裏就是我想出了
- 標籤頁本身不應該告訴我的程序,如果一個視圖可以或不能
- 我需要取消closing事件在程序邏輯的情況下,才能關閉(文件得救了嗎?是/否/取消),當它被關閉,以便
- 我需要檢測的能力,我可以就在那個時候清理/註銷
我的解決辦法,以實現我的視圖模型稱爲IRemovable的接口,公開了一個可移動布爾值和一個返回boolea的Remove()方法n(被刪除或沒有)。如果Removable爲true,我的選項卡控件只顯示X按鈕,Tab Control的Closing激發了IRemovable ViewModel的Remove(),如果它返回false,則將ViewModel的Remove返回false的事件參數Canceled屬性設置爲true。
因此,刪除視圖模型可能會提示用戶進行確認,從命令中取消註冊等。該視圖可以處理任何Windows窗體組件中的Closed事件和調用Dispose等(當然,我必須檢查我的View.DataContext是IRemovable)。
不管怎樣,我知道這是不是一個確切的答案,但希望它可以幫助你想出如何解決你自己的問題
你怎麼知道你的控件仍然活躍的一些想法? –