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方法会出错,但我没有在任何地方设置焦点。
谢谢!
既然你为目标传递null,那就意味着框架将基于键盘路由。FocusedElement,所以它要么是空的(如果应用程序不活动,或者键盘焦点在HwndHost或MessageBox等其他东西中,可能会发生),要么是键盘。FocusedElement是非空的,但不在窗口的可视/逻辑树中。