我一直在看教程,人们在他们的代码中创建CanExecute等方法。我假设他们这样做是为了帮助读者理解它是如何工作的。当我查看Command和ICommand时,它将我带到MSDN上用于Windows应用商店应用程序的ICommand类。是否没有WPF的Command类?
答案 0 :(得分:8)
WPF中ICommand
的内置实现是RoutedCommand
(及其兄弟RoutedUICommand
)。 RoutedCommand
的作用如下:
Execute
上的CanExecute
和RoutedCommand
方法不包含 命令的应用程序逻辑就像典型的情况一样ICommand
,但是,这些方法会引发遍历的事件 元素树查找具有CommandBinding
的对象。事件 附加到CommandBinding
的处理程序包含命令逻辑。
这个问题是这些事件处理程序必须附加到视图的代码隐藏中,这正是不想要在MVVM中执行的操作
在代码中看到CanExecute
方法的教程(我们实际上是指ICommand
实现之外的代码)正在使用自定义命令实现,例如{{3} }和DelegateCommand
旨在"转发"他们CanExecute
/ Execute
逻辑到动态提供的功能;通常,那些是viewmodel上公开命令的方法。
这些实现通常由MVVM框架提供(对于这两个示例,框架分别是Prism和MVVM Light),但它们非常简单(都是开源,抓取代码并阅读它)以及那些如果你不想要整个框架,没有什么可以阻止你复制/粘贴代码。
您可以将上面的内容概括为&#34; 内置了WPF中的命令类,但它在MVVM&#34;的上下文中并没有用。< / p>