Классические элементы пользовательского интерфейса в Windows Presentation Foundation. Шамшев Ан. Б. - 96 стр.

UptoLike

Составители: 

95
this.CommandBindings.Add(binding);
либо декларативным образом:
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Save"
Executed="SaveCommand_Executed"
CanExecute="SaveCommand CanExecute">
</CommandBinding>
</Window.CommandBindings>
В этом обработчике событий нужно просто проверить значение пе-
ременной isDirty и установить соответствующее значение для свойства
CanExecuteRoutedEventArg.CanExecute:
private void SaveCommand_CanExecute(object sender, CanExecuteRoutedEven-
tArgs e)
{
e.CanExecute = isDirty;
}
Если значением свойства isDirty оказывается false, то команда от-
ключается (делается недоступной), а если true, то включается (делается
доступной).
Применяя CanExecute, важно помнить следующее: WPF самостоя-
тельно решает, когда вызывать метод RoutedCommand.CanExecute() для
запуска обработчика событий и определения состояния команды. Диспет-
чер команд WPF делает это только тогда, когда обнаруживает изменение,
являющееся значительным с его точки зрения например, при переме-
щении фокуса с одного элемента управления на другой или после выпол-
нения команды. Элементы управления могут также инициировать событие
CanExecuteChanged, указывающее WPF оценить состояние команды зано-
во, например, подобное происходит при нажатии клавиши (например, при
нажатии клавиши в текстовом поле). В целом событие CanExecute будет
возбуждаться довольно часто, поэтому не следует использовать внутри
него код с длительным временем выполнения.