我从Josh Smith的MVVM tutorial获得了以下代码。

任何人都可以快速解释一下此代码的实际作用吗?

public event EventHandler CanExecuteChanged
{
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }
}

我不明白两件事:
  • CanExecuteChanged事件做什么?
  • CommandManager.RequerySuggested是做什么的?

  • 上面的代码来自hereRelayCommand类。

    最佳答案

  • CanExecuteChanged通知绑定(bind)到该Button的任何命令源(例如MenuItemICommand),指示CanExecute返回的值已更改。命令源对此很在意,因为它们通常需要相应地更新其状态(例如,如果Button返回CanExecute(),则false将禁用自身)。
  • 只要CommandManager.RequerySuggested认为发生了某些变化,从而影响命令的执行能力,就会引发CommandManager事件。例如,这可能是焦点转移。事实证明,此事件引发了很多事情。

  • 因此,实质上,这段代码的作用是确保每当命令管理器认为命令的执行能力已更改时,即使该命令实际上并未更改,该命令也会引发CanExecuteChanged

    我实际上不喜欢这种实现ICommand.CanExecuteChanged的方法-感觉很懒,而且并不完全可靠。我更喜欢一种更细粒度的方法,该命令公开一个方法(例如RaiseCanExecuteChanged()),您可以调用该方法来引发CanExecuteChanged,然后在适当的时候从 View 模型中调用它。

    例如,如果您有一个删除当前选定客户的命令,那么它将有一个CanExecute()处理程序,该处理程序仅在选择了一个客户的情况下才返回true。因此,只要选定的客户发生更改,您都将调用RaiseCanExecuteChanged

    关于wpf - CanExecuteChanged和CommandManager.RequerySuggested的实际任务是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6634777/

    10-11 04:49