WPF ICommand与RoutedCommand
让我们有一个buttonCommand
属性绑定到自定义命令。
什么时候应该实现ICommand
并从RoutedCommand
派生? 我看到RoutedCommand实现了ICommand 。
在这种情况下,我需要实现一个ICommand
? 那么MVVM模型呢? 哪一个更适合这个目的?
你已经注意到RoutedCommand
类是ICommand
接口的一个实现,它的主要区别在于它的function类似于RoutedEvent
:
RoutedCommand上的Execute和CanExecute方法不包含命令的应用程序逻辑(与典型的ICommand相同),而是这些方法引发遍历元素树的事件,以寻找具有CommandBinding的对象。 连接到CommandBinding的事件处理程序包含命令逻辑。
Execute方法引发了PreviewExecuted和Executed事件。 CanExecute方法引发了PreviewCanExecute和CanExecute事件。
在你不需要RoutedCommand
的行为的情况下,你将会看到你自己的ICommand
实现。 至于MVVM模式我不能说一个解决scheme,似乎每个人都有自己的方法。 但是,下面是我遇到的这个问题的一些方法:
- 在WPF中使用带有ViewModel的RoutedCommand
- 中继命令逻辑
- 简单的命令 (几乎相同的继电器命令,但值得一读)
Rich McGuire的答案中唯一增加的就是RoutedCommands(以及更为stream行的后代RoutedUICommand必须与事件处理程序连接才能正常工作。
我遇到过的大多数MVVM实现尝试利用对ViewModel的绑定,因此ViewModel(而不是View)拥有CanExecute / Execute逻辑。
相比之下,事件处理程序将这一负担转移到View。 然后处理可以传播到ViewModel,但是这意味着ViewModel和View之间稍微更高的耦合度(投射+方法调用等)。