ICommand的CanExecuteChanged事件

Icommand包含两个方法一个事件。

这两种方法的作用是明确的,但我无法理解 ICommand提供的事件什么

CanExecuteChanged事件何时被引发?

以下解释是在MSDN上,但我无法理解。

如果集中命令操作的命令管理器检测到命令源中的更改可能使已经引发但尚未由命令绑定执行的命令无效,则引发CanExecuteChanged

你能用简单的方法解释一下吗?

谢谢……

ICommandCanExecute方法发生更改时,会引发CanExecute

在某些第三方库中,如果CanExecute参数引发PropertyChanged事件, CanExecute引发CanExecute事件。 例如,如果CanExecute参数引发PropertyChanged事件,则MVVM Light Toolkit的RelayCommand引发CanExecuteChanged事件,而Prism的DelegateCommand RelayCommand引发。

此事件由命令引发,以通知其消费者(即Button,MenuItem)它的CanExecute属性可能已更改。 因此,如果焦点从一个TextBox移动到另一个TextBox,则可能需要启用/禁用您的命令。 此信息还需要使用您的命令传递给任何控件。

通常,此事件只是重新公开CommandManager.RequerySuggested事件。 从RoutedCommand类:

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

RequerySuggested事件经常被触发,因为移动焦点,更改文本选择。 这也可以通过调用InvalidateRequerySuggested手动引发。