我最近有一個例外,因爲在關閉屏幕後調用了CanExecute()
命令。處理ViewModels&CanExecute處理程序
這很容易通過增加一個額外的檢查方法來解決,但現在我擔心我的應用程序的生命週期性能,如果viewmodels沒有被正確處置。
我通過將它們作爲屬性存儲在ViewModel中,然後在xaml中綁定它們來掛鉤命令。
所以沒有人知道爲什麼關閉的窗口會繼續撥打CanExecute()
方法?
我最近有一個例外,因爲在關閉屏幕後調用了CanExecute()
命令。處理ViewModels&CanExecute處理程序
這很容易通過增加一個額外的檢查方法來解決,但現在我擔心我的應用程序的生命週期性能,如果viewmodels沒有被正確處置。
我通過將它們作爲屬性存儲在ViewModel中,然後在xaml中綁定它們來掛鉤命令。
所以沒有人知道爲什麼關閉的窗口會繼續撥打CanExecute()
方法?
您的視圖模型中可能仍然存在命令處理程序或屬性更改的處理程序。因此,視圖模型仍然存在,因此canexecute仍在執行中。您可能訂閱了CommandManager.RequerySuggested來更新您的命令。此事件在所有更新中調用,不僅在您的視圖模型創建的窗口上。
您應該(或可以)做的事情是訂閱Closed(窗口)或Unloaded(usercontrol)事件以將視圖模型的IsClosed狀態設置爲false,然後刪除命令或禁用它們(您將擁有在RelayCommand中實現此功能)。
發生這種情況的原因是CommandManager不知道它應該停止發射CanExecute,直到處理程序被垃圾收集爲止。
我有同樣的問題,我通過關閉窗口後將窗口的DataContext設置爲null
來解決它。它工作正常,假設命令綁定到ViewModel(刪除他的DataContext註銷canExecute事件處理程序)。
http://social.msdn.microsoft.com/Forums/en/wpf/thread/43fc6beb-0733-424a-a915-0e03b4ce2ae0可能對您有用。 – Gqqnbig 2013-02-02 10:59:31