RoutedCommand默认为不能执行

本文关键字:执行 不能 默认 RoutedCommand | 更新日期: 2023-09-27 18:01:33

我在上下文菜单中使用自定义的RoutedCommand。命令是这样定义的:

public static readonly RoutedCommand RoutedAddMainHeading = new RoutedCommand();

可以这样访问:

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

它工作得很好,除了当我的程序启动时,命令被禁用。当我点击窗口中的文本框后,它就被启用了。

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

我试着打电话给CommandManager。InvalidateRequerySuggested,但这似乎没有做任何事情。

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

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

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

似乎这是ManuItem独有的问题。如果我在按钮中使用此命令,则不会出现此问题。

是否有其他方法强制CanExecute重新求值?

或者一种方法来获得RoutedCommand默认为启用(或一种方法来编写一个自定义的)?

RoutedCommand默认为不能执行

尝试调用CommandManager.InvalidateRequerySuggested()

看起来和这里的问题是一样的:

为什么WPF RoutedCommand绑定上下文菜单项被禁用?

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