WPF ICommand vs RoutedCommand
让我们有一个按钮Command
属性绑定到自定义命令。
我应该何时实施ICommand
以及何时从RoutedCommand
派生? 我看到RoutedCommand实现了ICommand 。
在这种情况下,我需要实现一个ICommand
吗? MVVM模型呢? 哪一个更适合这个目的?
正如您已经注意到的, RoutedCommand
类是ICommand
接口的一个实现,它的主要区别在于它的功能类似于RoutedEvent
:
RoutedCommand上的Execute和CanExecute方法不包含命令的应用程序逻辑,就像典型的ICommand一样,但是这些方法会引发遍历元素树的事件,以寻找具有CommandBinding的对象。 连接到CommandBinding的事件处理程序包含命令逻辑。
Execute方法引发了PreviewExecuted和Executed事件。 CanExecute方法引发了PreviewCanExecute和CanExecute事件。
在你不需要RoutedCommand
的行为的情况下,你会看到你自己的ICommand
实现。 至于MVVM模式,我不能说一个解决方案,似乎每个人都有自己的方法。 但是,以下是我遇到的一些解决此问题的方法:
我唯一要添加到Rich McGuire的答案是RoutedCommands(和他们更流行的后代RoutedUICommand必须连接事件处理程序才能正常工作。
我遇到过的大多数MVVM实现尝试利用对ViewModel的绑定,因此ViewModel(而不是View)拥有CanExecute / Execute逻辑。
相比之下,事件处理程序将这一负担转移到View。 然后可以将处理传播到ViewModel,但这意味着ViewModel和View之间的耦合程度稍高(转换+方法调用等)。
链接地址: http://www.djcxy.com/p/56157.html