【发布时间】:2016-01-26 20:23:58
【问题描述】:
我想使用 ApplicationCommands。剪切、复制、粘贴、保存……它们看起来很有趣,因为命令路由、键绑定以及某些控件使用它们的事实。我了解如何绑定到我的 VM 上的中继/委托命令,但我似乎无法理解应用程序命令。我找到了几个旧答案,但没有其他信息,我有点不愿意遵循这些路线。
这似乎很常见,但信息似乎非常有限。这通常是如何实现的? (使用或不使用 PRISM、MVVM Light 等)
旧答案:
How to bind ApplicationCommands to a ViewModel 但这对我来说使用行为来解决这个问题似乎很奇怪
WPF - Handle an ApplicationCommand in the ViewModel 但我认为这不是已接受答案中的 MVVM。
在旧文章中使用附加属性:CommandBindings with MVVM 引用另一篇文章。
【问题讨论】:
-
很抱歉没有时间详细回答,但您的第一个链接在正确的轨道上。那里的示例将行为与视图模型紧密耦合(this:
AssociatedObject.SelectedItem as NestingItemTreeViewModelBase;)。这可以防止行为真正可重用。您应该公开ICommand依赖属性,而不是强制转换。您将这些 DP 绑定到包含命令逻辑的 ViewModel,然后将应用程序命令中继到绑定到此 DP 的命令。这将符合 MVVM 模式。希望能给你一个方向 -
您能否详细说明这部分:“然后将应用程序命令中继到绑定到此 DP 的命令”?另外,我不需要用户控件,那么这些依赖属性去哪里了?
-
您也可以将 DP 添加到行为中。它们也源自
DependencyObject,就像所有 WPF 控件一样。在内部,即CopyCommandCanExecute,您分别调用e.CanExecute = CopyCommand.CanExecute(null)和CopyCommand.Execute(null)(CopyCommand是 CopyCommand DP 的包装器)。在 Xaml 中,您将 ViewModel 绑定到它`