5

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

4

1 回答 1

8

ICommandWPF 中的内置实现是RoutedCommand(及其兄弟RoutedUICommand)。RoutedCommand像这样工作:

a 上的ExecuteandCanExecute方法RoutedCommand不包含命令的应用程序逻辑,就像典型 ICommandCommandBinding. 附加到的事件处理程序CommandBinding包含命令逻辑。

这样做的问题是这些事件处理程序必须附加到您的视图的代码隐藏中,这正是您不想在 MVVM 中做的事情。

您在代码中看到CanExecute方法的教程(我们实际上是指实现之外的代码正在ICommandDelegateCommand使用自定义命令实现,例如RelayCommand旨在将它们CanExecute/Execute逻辑“转发”到动态提供的函数;通常,这些是视图模型上公开命令的方法。

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

您可以将上述内容总结为“ WPF内置了一个命令类,但在 MVVM 的上下文中它并不是真正有用”。

于 2013-03-06T13:50:28.863 回答