Событие CanExecuteChanged ICommand
Icommand
содержит два метода и одно событие.
То, что делают эти два метода, ясно, но Я не могу понять, что это событие делает, которое представлено в Icommand
.
Когда возникает событие CanExecuteChanged
?
Ниже приведено описание MSDN, но я не могу его понять.
CanExecuteChanged возникает, если менеджер команд, который централизует командные операции, обнаруживает изменение в команде источник, который может привести к аннулированию команды, которая была поднята, но не но выполняется командой bind.
Не могли бы вы объяснить это простым языком?
Спасибо......
Ответы
Ответ 1
CanExecuteChanged
возникает при изменении CanExecute
метода ICommand
В некоторых сторонних библиотеках событие CanExecuteChanged
также увеличивается, если параметры CanExecute
поднимают событие PropertyChanged
. Например, MVVM Light Toolkit RelayCommand
вызывает событие CanExecuteChanged
, если параметры CanExecute
поднимают событие PropertyChanged
, а Prism DelegateCommand
- нет.
Ответ 2
Это событие генерируется командой, чтобы уведомить пользователя (т.е. Button, MenuItem) о том, что свойство CanExecute может быть изменено. Поэтому, если фокус перемещается из одного текстового поля в другой, вам может потребоваться включить/отключить вашу команду. Эта информация также должна быть передана любым элементам управления с помощью вашей команды.
В общем случае это событие просто пересматривает событие CommandManager.RequerySuggested. Из класса RoutedCommand:
public event EventHandler CanExecuteChanged {
add {
CommandManager.RequerySuggested += value;
}
remove {
CommandManager.RequerySuggested -= value;
}
}
Событие RequerySpected запускается довольно часто, когда фокус перемещается, выбор текста изменяется. Это также можно повысить вручную, вызвав InvalidateRequerySuggested.