RegisterClassCommandBinding没有触发CanExecute

本文关键字:CanExecute RegisterClassCommandBinding | 更新日期: 2023-09-27 18:10:04

在某些情况下(我无法建立模式),执行会越过

    System.Windows.Input.CommandManager.InvalidateRequerySuggested();
    var can = GlobalCommands.UpdateWindowTitle.CanExecute(title, null);
    GlobalCommands.UpdateWindowTitle.Execute(title, null);

而不输入CanExecute或Execute方法。变量"can"为false(不执行CanExecute),该命令永远不会触发。但有时它会像预期的那样工作。

命令是这样创建和绑定的:

    var updateTitleBinding = new CommandBinding(GlobalCommands.UpdateWindowTitle,         UpdateWindowTitle, CanUpdateWindowTitle);
    CommandManager.RegisterClassCommandBinding(typeof(System.Windows.Window), updateTitleBinding);

我不能用

    Application.Current.MainWindow.CommandBindings.Add(
         new CommandBinding(_addCommand, ExecuteAddCommand, CanExecuteAddCommand));

,因为调用类不是可视元素,也没有CommandBindings

I tried calling

    System.Windows.Input.CommandManager.InvalidateRequerySuggested();

在CanExecute和Execute调用之前,但这并不影响行为。

,

你知道那里可能会发生什么吗?还有别的句型可以用吗?

这个问题看起来类似于CanExecute方法会出错,但我没有在任何地方设置焦点。

谢谢!

RegisterClassCommandBinding没有触发CanExecute

既然你为目标传递null,那就意味着框架将基于键盘路由。FocusedElement,所以它要么是空的(如果应用程序不活动,或者键盘焦点在HwndHost或MessageBox等其他东西中,可能会发生),要么是键盘。FocusedElement是非空的,但不在窗口的可视/逻辑树中。