EventToCommand和CommandManagerBinding无法正常工作

时间:2017-06-21 07:51:11

标签: c# wpf mvvm catel

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

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

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

提前致谢

2 个答案:

答案 0 :(得分:0)

使用InvokeCommandAction怎么样?

答案 1 :(得分:0)

我已对问题跟踪器上创建的故障单做出响应,但也会在此处提供可用性。

请注意,这已经过Catel v5测试,但也适用于v4。

我做了两处修改:

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

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

然后我在VM中注册命令的操作:

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

2.你必须首先绑定命令,然后绑定xaml中的命令参数(顺序很重要,虽然它不应该,但是我们无法修复的xaml解析问题):< / p>

<!-- 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重新映射应用程序范围的命令输入手势。