ICommand的CanExecuteChanged事件

Pri*_*esh 21 .net c# wpf icommand

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

这两种方法的作用是明确的,但我无法理解事件所提供的内容ICommand.

活动何时CanExecuteChanged举起?

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

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

你能用简单的语言解释一下吗?

谢谢......

Cod*_*ked 22

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

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

public event EventHandler CanExecuteChanged {
    add {
        CommandManager.RequerySuggested += value;
    }
    remove {
        CommandManager.RequerySuggested -= value;
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Rac*_*hel 7

CanExecuteChangedCanExecute方法ICommand改变时引发

在某些第三方库中,CanExecuteChanged如果CanExecute参数引发PropertyChanged事件,则也会引发该事件.例如,如果参数引发事件,MVVM Light Toolkit RelayCommand会引发事件,而Prism 则不引发事件.CanExecuteChangedCanExecutePropertyChangedDelegateCommand