RoutedCommand默认为无法执行

时间:2011-07-09 17:18:52

标签: c# wpf

我在上下文菜单中使用自定义RoutedCommand。该命令的定义如下:

public static readonly RoutedCommand RoutedAddMainHeading = new RoutedCommand();

可以这样访问:

<ContextMenu>
    <MenuItem Header="Add Main Heading" Command="local:JurisdictionVM.RoutedAddMainHeading" />
</ContextMenu>

它工作正常,除非我的程序启动,命令被禁用。单击窗口中的文本框后,它将变为启用状态。

如果我使用自定义ICommand实现(CanExecute总是返回true),则不会发生这种情况,但命令不会被路由。

我试图调用CommandManager.InvalidateRequerySuggested,但这似乎没有做任何事情。

我使用命令接收器来定义命令绑定并将其链接到我的ViewModel,这可能导致问题。我正在使用我在此处找到的实现:http://www.codeproject.com/KB/WPF/VMCommanding.aspx

更新:看起来自定义命令绑定不是问题。我尝试了一个标准的CommandBinding链接到代码隐藏方法,并有同样的问题。 CommandBinding的定义如下:

<CommandBinding Command="local:JurisdictionVM.RoutedAddMainHeading" CanExecute="Foo_CanExecute" Executed="Foo_Executed"/>

似乎这是ManuItem独有的问题。如果我在一个按钮中使用此命令,我就没有这个问题。

是否有其他方法可以强制重新评估CanExecute?

或者让RoutedCommand默认为启用(或者编写自定义方式)的方法?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

看起来这与此处的问题相同:

Why is this WPF RoutedCommand bound Context MenuItem disabled?

解决方案是在窗口构造函数中设置焦点。