我在我的WPF應用程序中使用MVVM模式。我試圖緩存我的窗戶,以提高性能。要做到這一點,我絕不會關閉它們,只是隱藏而不是關閉。所有隱藏的窗口都存儲在字典中,所以我可以重新使用它們。當窗口再次打開時,我創建一個新的視圖模型並將其與緩存視圖關聯。不要從隱藏窗口調用CanExecute方法
但有一個問題,因爲隱藏的窗口不斷調用ViewModels中的CanExecute命令方法。當用戶打開和關閉很多窗口時,這會導致性能問題。
當我將Window.DataContext
屬性設置爲null或執行ClearValue(DataContextProperty)
我實現了我的目標,但是存在問題。如果我有任何雙向綁定,它們在從數據上下文解除綁定期間都會觸發。所以,我的視圖模型中的一些值變爲null。我不希望這樣做,因爲在某些情況下,我會在隱藏Views之後從ViewModel讀取屬性。
你能幫我解決主要問題(不要從隱藏的窗口調用CanExecute方法)。
您是使用RoutedCommands還是您自己的自定義ICommand實現? – mclark1129 2012-08-10 16:13:32
您沒有正確使用您的虛擬機。當一個視圖關閉(隱藏)時,(最終)VM被拋出。您應該重構代碼,不要引用「隱藏」的虛擬機。在發生未綁定之前,先做任何你需要做的事情,然後立即處理它。不要將您的緩存視圖視爲隱藏,將它們視爲已關閉,因爲這就是它們的實際情況。 – 2012-08-10 16:48:03