CanExecuteChanged событие ICommand - PullRequest
19 голосов
/ 21 июня 2011

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

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

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

Приведенное ниже объяснение относится к MSDN , но I не могу понять.

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

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

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

Ответы [ 2 ]

22 голосов
/ 21 июня 2011

Это событие вызывается командой, чтобы уведомить своих потребителей (т.е. Button, MenuItem) о том, что его свойство CanExecute могло измениться. Поэтому, если фокус перемещается из одного TextBox в другое, возможно, вам нужно включить / отключить вашу команду. Эту информацию также необходимо передать любому элементу управления с помощью вашей команды.

В общем случае это событие просто повторно представляет событие CommandManager.RequerySuggested . Из класса RoutedCommand:

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

Событие RequerySuggested вызывается довольно часто, так как фокус перемещается, выбор текста изменяется. Это также можно вызвать вручную, вызвав InvalidateRequerySuggested .

7 голосов
/ 21 июня 2011

CanExecuteChanged вызывается при изменении метода CanExecute ICommand

В некоторых сторонних библиотеках событие CanExecuteChanged также вызывается, если параметры CanExecute поднимают PropertyChanged событие.Например, MVVM Light Toolkit RelayCommand вызывает событие CanExecuteChanged, если параметры CanExecute вызывают событие PropertyChanged, а DelegateCommand у Prism - нет.

...