【问题标题】:Command's CanExecute method is called but not Execute method命令的 CanExecute 方法被调用但不是 Execute 方法
【发布时间】:2011-10-10 16:21:20
【问题描述】:

我已将命令绑定到功能区控件上的按钮。按钮上的 CanExecute 方法按预期调用,但单击按钮不会导致调用 Execute 方法。 CanExecuteCanExecute 属性设置为 true - 相关按钮已启用并可点击。

以前有没有其他人见过这种行为?如果是这样,我该如何解决它!

编辑:

CommandBinding commandBinding = new CommandBinding(StaticCommands.ThisCommand, ThisCommandExecutedHandler, ThisCommandCanExecuteHandler);
CommandManager.RegisterClassCommandBinding(this.GetType(), commandBinding);
CommandBindingList.Add(commandBinding);

StaticCommands.ThisCommand 是一个RoutedCommand,输入手势为F5

很遗憾,我无法发布任何 xaml,因为所有内容都包含在另一个团队的库中。我假设现在是正确的。此外,使用与命令关联的键盘手势(按下F5)会导致调用执行方法。

没有抛出异常,输出窗口中没有消息,并且 snoop 显示正确绑定的所有内容。我真的很难过。

【问题讨论】:

  • 如果 CanExecute() 返回 false,它不能 Execute()CanExecute()被调用了,但是点击按钮返回什么?
  • 如果是命令绑定,如果CanExecute(object)方法返回false,则无法点击。
  • @BoltClock 可能是对的。但是,如果 CanExecute() 返回 true,我们需要查看一些代码来帮助诊断它。
  • 请发布您的 XAML 和定义 XAML 中数据绑定命令的代码。
  • CanExecute 返回真。该按钮已启用并可点击。

标签: c# wpf routed-commands


【解决方案1】:

如果参数类型不正确匹配,通常会发生这种情况...您是否绑定了一种类型的 CommandParameter 并在 Command.Execute() 调用中接受不同类型的参数?

【讨论】:

  • 我正在使用ExecuteRoutedEventHandler,它只接受发送者和事件参数。键盘手势会起作用但不单击按钮是否有原因?
  • 奇怪!键盘手势是否指向相同的ICommand?如果是,则这表明CommandBinding 可能存在问题(与KeyBinding 相同的命令有效)。在Window_loaded 活动中致电CommandManager.InvalidateRequerySuggested(); 并查看。
【解决方案2】:

通过将RoutedCommands 包装在RelayCommand 中来解决此问题。我不知道为什么会这样,但假设其他团队的装配有问题。

【讨论】:

    猜你喜欢
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2011-10-20
    相关资源
    最近更新 更多