Подтвердить что ты не робот

Событие CanExecuteChanged ICommand

Icommand содержит два метода и одно событие.

То, что делают эти два метода, ясно, но Я не могу понять, что это событие делает, которое представлено в Icommand.

Когда возникает событие CanExecuteChanged?

Ниже приведено описание MSDN, но я не могу его понять.

CanExecuteChanged возникает, если менеджер команд, который централизует командные операции, обнаруживает изменение в команде источник, который может привести к аннулированию команды, которая была поднята, но не но выполняется командой bind.

Не могли бы вы объяснить это простым языком?

Спасибо......

4b9b3361

Ответ 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.