我看过一些教程,人们在他们的代码中创建像 CanExecute 这样的方法。我假设他们这样做是为了帮助读者理解这一切是如何运作的。当我查找 Command 和 ICommand 时,它会将我带到 MSDN 上用于 Windows 应用商店应用程序的 ICommand 类。 WPF 没有 Command 类吗?
的内置实现ICommand
在 WPF 中是RoutedCommand http://msdn.microsoft.com/en-us/library/system.windows.input.routedcommand.aspx(及其兄弟姐妹RoutedUICommand
). RoutedCommand
工作原理如下:
The Execute
and CanExecute
上的方法RoutedCommand
不包含
命令的应用逻辑与典型的情况一样ICommand
,而是这些方法引发了遍历的事件
元素树寻找具有 a 的对象CommandBinding
。事件
附加到的处理程序CommandBinding
包含命令逻辑。
这样做的问题是这些事件处理程序必须附加到您的代码隐藏中view,这正是你所做的not想要在MVVM中做。
您所看到的教程CanExecute
代码中的方法(我们真正的意思是代码之外的ICommand
执行)正在使用自定义命令实现,例如DelegateCommand http://msdn.microsoft.com/en-us/library/microsoft.practices.prism.commands.delegatecommand%28v=pandp.40%29.aspx and RelayCommand http://mvvmlight.codeplex.com/SourceControl/changeset/view/cf8d07c2ec3f#GalaSoft.MvvmLight/GalaSoft.MvvmLight%20%28NET35%29/Command/RelayCommand.cs旨在“转发”他们的CanExecute
/Execute
动态提供的函数逻辑;通常,这些是视图模型上公开命令的方法。
这些实现通常由 MVVM 框架提供(对于这两个示例,框架分别是 Prism 和 MVVM Light),但它们非常简单(两者都是开源的,获取代码并阅读它),并且没有什么可以阻止您复制/粘贴如果您不需要整个框架,则可以使用代码。
您可以将上面的内容总结为“有is在 WPF 中内置了一个命令类,但它在 MVVM 上下文中并不是真正有用”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)