2011-10-05 72 views
2

我一直在使用RelayCommand這裏和那裏,它讓我想知道...想知道什麼時候CommandManager.InvalidateRequerySuggested()被WPF調用?WPF如何確定何時使用CommandManager失效(CommandManager.InvalidateRequerySuggested)?

我的猜測是每當UI get的任何其他路由事件被觸發時,MVVM世界中的這種事件主要表示何時引發OnPropertyChanged事件,導致值發生更改,導致執行一些相關的Routedevent事件。但是,這只是一個猜測,我想知道是否有人知道這裏的確切內部工作。

回答

2

有幾個原因,我所知道的:

  • 當鍵盤焦點的變化。

  • 命令執行後。

  • 控件可以在某些其他情況下(如在TextBox中按下某個鍵時)認爲有必要時調用它。

物業單獨改變不是一般的失效(我猜因爲性能原因)的一個原因。

不幸的是,我沒有在MSDN中找到任何關於此的文檔。我在這裏發佈的是基於我在Pro WPF in C# 2010(偉大的書BTW)中找到的。

另外,它的CommandManager不是無效的。 CommandManager僅發送一個事件(控件使用命令訂閱),以便它們可以更新其啓用/禁用狀態。

+0

意思是「使用** CommandManager無效**」...... –

+0

這幾乎涵蓋了我注意到的情況,最終導致CommandManager重新查詢'CanExecute's。我仍然遇到過一些場景,我需要通過調用'CommandManager.InvalidateRequerySuggested()'來手工啓動CommandManager,通常在'PropertyChanged'通知之後,如前所述,它不會自行失效。 – Aphex

相關問題