ICommand
WPF中的内置实现是RoutedCommand
(和它的兄弟RoutedUICommand
).RoutedCommand
像这样工作:
a上的
Execute
和CanExecute
方法RoutedCommand
不包含命令的应用程序逻辑,就像典型的情况一样ICommand
,而是这些方法引发遍历元素树的事件,寻找带有a的对象CommandBinding
.附加到的事件处理程序CommandBinding
包含命令逻辑.
这个问题是这些事件处理程序必须附加到您的视图的代码隐藏,这正是您不希望在MVVM中执行的操作.
在这里你看到教程CanExecute
在代码的方法(和我们真正的意思码外ICommand
执行)使用自定义的命令实现,如DelegateCommand
和RelayCommand
其被设计为"前进"他们CanExecute
/ Execute
逻辑来提供在飞行功能; 通常,那些是暴露命令的viewmodel上的方法.
这些实现通常由MVVM框架提供(对于这两个示例,框架分别是Prism和MVVM Light),但它们非常简单(都是开源,抓取代码并读取它)并且没有什么能阻止你复制/粘贴代码,如果你不想要整个框架.
你可以概括为上述"有被内置在WPF命令类,但它不是在MVVM的情况下非常有用".