讓我們有一個按鈕Command
綁定到自定義命令的屬性。WPF ICommand vs RoutedCommand
什麼時候應該執行ICommand
以及何時從RoutedCommand
派生?我看到RoutedCommand實現了ICommand。
在哪種情況下我需要補充ICommand
? MVVM模型呢?哪一個更適合這個目的?
讓我們有一個按鈕Command
綁定到自定義命令的屬性。WPF ICommand vs RoutedCommand
什麼時候應該執行ICommand
以及何時從RoutedCommand
派生?我看到RoutedCommand實現了ICommand。
在哪種情況下我需要補充ICommand
? MVVM模型呢?哪一個更適合這個目的?
正如您已經注意到了RoutedCommand
class是ICommand
接口的實現,其主要區別,如果它的功能類似於一個RoutedEvent
:
的執行和對的RoutedCommand CanExecute方法不包含命令的應用程序邏輯與典型的ICommand相同,但是,這些方法會引發遍歷元素樹的事件,以尋找具有CommandBinding的對象。連接到CommandBinding的事件處理程序包含命令邏輯。
Execute方法引發了PreviewExecuted和Executed事件。 CanExecute方法引發了PreviewCanExecute和CanExecute事件。
在當你不想要的RoutedCommand
你會看着自己實現ICommand
行爲的情況。至於MVVM模式,我不能說一個解決方案,似乎每個人都有自己的方法。但是,這裏有一些方法解決這個問題,我已經遇到:
唯一我要添加到Rich McGuire的答案是RoutedCommands(和他們更普遍的後裔RoutedUICommand必須與事件處理程序連線才能正常工作。
我遇到過的大多數MVVM實現嘗試利用對ViewModel的綁定,因此ViewModel(而不是View)擁有CanExecute/Execute邏輯。
相比之下,事件處理程序將該負擔移至視圖。然後可以將處理傳播到ViewModel,但這意味着ViewModel和View之間的耦合程度稍高(轉換+方法調用等)。
很好的答案。 +1 – micahtan 2009-07-16 12:41:21