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模式,我不能说一个解决方案,似乎每个人都有自己的方法。 但是,以下是我遇到的一些解决此问题的方法:

  • 在WPF中使用带有ViewModel的RoutedCommands
  • 中继命令逻辑
  • 简单命令(几乎与继电器命令相同,但值得一读)

  • 我唯一要添加到Rich McGuire的答案是RoutedCommands(和他们更流行的后代RoutedUICommand必须连接事件处理程序才能正常工作。

    我遇到过的大多数MVVM实现尝试利用对ViewModel的绑定,因此ViewModel(而不是View)拥有CanExecute / Execute逻辑。

    相比之下,事件处理程序将这一负担转移到View。 然后可以将处理传播到ViewModel,但这意味着ViewModel和View之间的耦合程度稍高(转换+方法调用等)。

    链接地址: http://www.djcxy.com/p/56157.html

    上一篇: WPF ICommand vs RoutedCommand

    下一篇: MVVM ICommand alternative