2017-06-21 84 views
2

我有一个ViewModel,其中包含一个通过CommandManager暴露给其他视图的命令。EventToCommand和CommandManagerBinding不工作

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

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

在此先感谢

+0

您是否可以在没有EventToCommand的情况下使用CommandManagerBinding?换句话说,你确定你的命令被正确注册了吗? –

+0

是的,我正在使用CommandItem来执行完全相同的MenuItem。它在MenuItem上工作正常。 – HumpaLumpa007

+0

你可以请创建一个小的repro,这可以在Catel v5中修复吗?它应该工作,因为CommandManagerBinding只是一个全局的事情。 –

回答

0

我已经回复了问题跟踪器上创建的故障单,但也会将答复放在这里。

请注意,这已经过Catel v5的测试,但也应该与v4一起使用。

我发2点的变化:

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

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

然后我注册了VM中的命令的动作:

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

2.你必须先绑定命令,然后在xaml中命令参数(顺序很重要,尽管它不应该,但这是一个xa毫升的解析问题,我们不能修复):

<!-- 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

如果使用乐团(见https://github.com/wildgums/orchestra),你甚至可以重新映射应用范围的命令输入手势与准备使用的UI。