EventToCommand 和 CommandManagerBinding 不起作用

Posted

技术标签:

【中文标题】EventToCommand 和 CommandManagerBinding 不起作用【英文标题】:EventToCommand and CommandManagerBinding not working 【发布时间】:2017-06-21 07:51:11 【问题描述】:

我有一个 ViewModel,其中包含一个通过 CommandManager 向其他视图公开的命令。

现在,如果我双击 TreeView (https://catelproject.atlassian.net/wiki/display/CTL/EventToCommand) 的项目,我想使用 EventToCommand 来触发命令。

不幸的是,如果我使用catel:CommandManagerBinding,则不会触发命令,普通的Binding 对视图的 ViewModel 的命令工作正常。但我需要绑定到另一个 ViewModel 的命令。

提前致谢

【问题讨论】:

你能在没有 EventToCommand 的情况下使用 CommandManagerBinding 吗?换句话说,你确定你的命令被正确注册了吗? 是的,我正在将命令用于执行完全相同的 MenuItem。它在 MenuItem 上运行良好。 能否请您创建一个小型复制品,以便在 Catel v5 中修复?它应该可以工作,因为 CommandManagerBinding 只是一个全局的东西。 我创建了一个带有此错误 github.com/HumpaLumpa007/EventToCommand.CommandManagerBinding 的测试项目。我也会在 github 项目页面上创建一个 issue 【参考方案1】:

使用 InvokeCommandAction 怎么样?

【讨论】:

【参考方案2】:

我已经回复了在问题跟踪器上创建的工单,但也会将回复放在这里的可用性。

请注意,这已经在 Catel v5 上进行了测试,但也应该适用于 v4。

我做了 2 处更改:

1.我在启动时创建命令:

var commandManager = ServiceLocator.Default.ResolveType<ICommandManager>();
commandManager.CreateCommand("AddToCollectionCommand");

然后我在虚拟机中为命令注册一个动作:

commandManager.RegisterCommand("AddToCollectionCommand", AddToCollectionCommand, this);

2.您必须先绑定命令,然后绑定xaml中的命令参数(顺序很重要,虽然不应该,但这是我们无法解决的xaml解析问题):

<!-- now works! -->
<catel:EventToCommand Command="catel:CommandManagerBinding AddToCollectionCommand" 
                                         CommandParameter="Binding SelectedDataItem"
                                         DisableAssociatedObjectOnCannotExecute="False" />

我建议您还研究应用程序范围的命令容器。它们非常强大,可以让您分离关注点。您可以在此处找到文档:

http://docs.catelproject.com/vnext/catel-mvvm/commands-events/application-wide-commands

如果您使用 Orchestra(请参阅 https://github.com/wildgums/orchestra),您甚至可以使用现成的 UI 重新映射应用范围内的命令输入手势。

【讨论】:

以上是关于EventToCommand 和 CommandManagerBinding 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

MVVM Light:在 XAML 中添加 EventToCommand 而不使用 Blend、更简单的方法或片段?

MVVMLight EventToCommand导致内存泄漏

WP8 MvvmLight命名空间丢失,EventToCommand不存在

TreeViewItem 展开时调用命令

ENode框架一台机器在处理Command时的设计思路

& 和 && 区别和联系,| 和 || 区别和联系