MVVM中的命令

tyl*_*hes 5 wpf msdn command mvvm

我一直在看教程,人们在他们的代码中创建像CanExecute这样的方法.我假设他们这样做是为了帮助读者理解它是如何工作的.当我查看Command和ICommand时,它将我带到MSDN上用于Windows应用商店应用程序的ICommand类.是不是WPF的Command类?

Jon*_*Jon 8

ICommandWPF中的内置实现是RoutedCommand(和它的兄弟RoutedUICommand).RoutedCommand像这样工作:

a上的ExecuteCanExecute方法RoutedCommand不包含命令的应用程序逻辑,就像典型的情况一样 ICommand,而是这些方法引发遍历元素树的事件,寻找带有a的对象CommandBinding.附加到的事件处理程序CommandBinding包含命令逻辑.

这个问题是这些事件处理程序必须附加到您的视图的代码隐藏,这正是您希望在MVVM中执行的操作.

在这里你看到教程CanExecute在代码的方法(和我们真正的意思码ICommand执行)使用自定义的命令实现,如DelegateCommandRelayCommand其被设计为"前进"他们CanExecute/ Execute逻辑来提供在飞行功能; 通常,那些是暴露命令的viewmodel上的方法.

这些实现通常由MVVM框架提供(对于这两个示例,框架分别是Prism和MVVM Light),但它们非常简单(都是开源,抓取代码并读取它)并且没有什么能阻止你复制/粘贴代码,如果你不想要整个框架.

你可以概括为上述"有内置在WPF命令类,但它不是在MVVM的情况下非常有用".