【问题标题】:Does calling "command.Execute" implicitly call CanExecute first?调用“command.Execute”会先隐式调用 CanExecute 吗?
【发布时间】:2014-08-27 11:57:30
【问题描述】:

我只是在没有先调用 CanExecute 的情况下实现了对命令的 Execute 调用。

从调试中我会说 CanExecute 被调用了;但是,我不确定这是否是巧合。

我想知道我是否可以依赖这样一个事实,即每当我手动提出 Execute 时都会隐式调用 CanExecute,或者我是否应该确保自己调用 CanExecute?

【问题讨论】:

  • 默认情况下,命令执行者负责验证命令是否可以执行。

标签: c# wpf routed-commands canexecute


【解决方案1】:

你不能依赖它。 CanExecute()Command 绑定到启用命令的 UI 项(如按钮)时调用(通过 CommandManager),但在 Execute() 中检查 CanExecute() 本身将是 @ 的特定实现的实现细节987654326@ 并不暗示。

但是,考虑到我必须在自己的代码中执行以下操作的频率,这是一个有趣的想法,而且还不错:

if (SomeCommand.CanExecute(null))
    SomeCommand.Execute(null);

【讨论】:

    【解决方案2】:

    不,如果您只是调用 Execute 方法,它不会停止执行命令。 如果你想这样做,你应该使用:

    if(myCommand.CanExecute())
    {
        myCommand.Execute(); 
    }
    

    或者,如果您从绑定中使用该命令,则应在更改相应属性时引发 myCommand.RaiseCanExecuteChanged。

    【讨论】:

      猜你喜欢
      • 2012-12-27
      • 2011-10-22
      • 2018-06-21
      • 1970-01-01
      • 2023-04-03
      • 2011-01-27
      • 2019-04-27
      • 1970-01-01
      • 2021-06-24
      相关资源
      最近更新 更多