PaN*_*1Me 48 wpf routedcommand icommand
让我们有一个Command绑定到自定义命令的按钮属性.
我什么时候应该实施ICommand,何时衍生出来RoutedCommand?我看到RoutedCommand实现了ICommand.
在哪种情况下我需要补充一个ICommand?那么MVVM模型呢?哪一种更适合这个目的?
Ric*_*ire 66
正如您已经注意到RoutedCommand该类是ICommand接口的实现,它的主要区别在于它的功能类似于RoutedEvent:
RoutedCommand上的Execute和CanExecute方法不包含命令的应用程序逻辑,就像典型的ICommand一样,而是这些方法引发遍历元素树的事件,使用CommandBinding查找对象.附加到CommandBinding的事件处理程序包含命令逻辑.
Execute方法引发PreviewExecuted和Executed事件.CanExecute方法引发PreviewCanExecute和CanExecute事件.
在您不希望行为的情况下,RoutedCommand您将看到自己的实现ICommand.至于MVVM模式,我不能说一个解决方案,似乎每个人都有自己的方法论.但是,我遇到过以下几个解决这个问题的方法:
mic*_*tan 25
我唯一要补充的是Rich McGuire的答案是RoutedCommands(以及他们更普遍的后代RoutedUICommand必须与事件处理程序连接才能正常工作.
我遇到的大多数MVVM实现都试图利用对ViewModel的绑定,因此ViewModel(而不是View)拥有CanExecute/Execute逻辑.
相反,事件处理程序将负担转移到View.然后可以将处理传播到ViewModel,但这意味着ViewModel和View(cast +方法调用等)之间的耦合程度略高.