RoutedCommand.CanExecuteChanged Событие
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Происходит, когда диспетчер команд обнаруживает изменение источника команды. Эти изменения часто влияют на то, должна ли команда выполняться для текущего целевого объекта команды.
public:
virtual event EventHandler ^ CanExecuteChanged;
public event EventHandler CanExecuteChanged;
member this.CanExecuteChanged : EventHandler
Public Custom Event CanExecuteChanged As EventHandler
Тип события
Реализации
Примеры
В следующем примере показан CanExecuteChanged обработчик событий из пользовательской реализации ICommandSource.
this.Command
В этом примере является свойством Command объекта ICommandSource. Если команда не null
имеет значение , команда приводится к RoutedCommand. Если команда является RoutedCommand, то CanExecute метод вызывается передачей CommandTarget и CommandParameter. Если команда не RoutedCommandявляется , она приводится к ICommandCanExecute и вызывается методом передачи CommandParameter.
CanExecute Если метод возвращает true
значение , элемент управления включен; в противном случае элемент управления будет отключен.
private void CanExecuteChanged(object sender, EventArgs e)
{
if (this.Command != null)
{
RoutedCommand command = this.Command as RoutedCommand;
// If a RoutedCommand.
if (command != null)
{
if (command.CanExecute(CommandParameter, CommandTarget))
{
this.IsEnabled = true;
}
else
{
this.IsEnabled = false;
}
}
// If a not RoutedCommand.
else
{
if (Command.CanExecute(CommandParameter))
{
this.IsEnabled = true;
}
else
{
this.IsEnabled = false;
}
}
}
}
Private Sub CanExecuteChanged(ByVal sender As Object, ByVal e As EventArgs)
If Me.Command IsNot Nothing Then
Dim command As RoutedCommand = TryCast(Me.Command, RoutedCommand)
' If a RoutedCommand.
If command IsNot Nothing Then
If command.CanExecute(CommandParameter, CommandTarget) Then
Me.IsEnabled = True
Else
Me.IsEnabled = False
End If
' If a not RoutedCommand.
Else
If Me.Command.CanExecute(CommandParameter) Then
Me.IsEnabled = True
Else
Me.IsEnabled = False
End If
End If
End If
End Sub
Комментарии
Объект RoutedCommand прослушивает RequerySuggested событие , которое вызывается CommandManager. Событие RequerySuggested возникает при каждом выполнении условий, которые могут изменить необходимость выполнения команды, например при изменении фокуса клавиатуры. Когда команда получает RequerySuggested событие , она вызывает CanExecuteChanged событие . Как правило, источник команды прослушивает это событие и запрашивает RoutedCommand с помощью CanExecute метода . Большинство источников команд отключают себя, если команда не может быть выполнена, как часть их привязки команды. Например, если MenuItem команда не может быть выполнена, затеняется.
В некоторых ситуациях объект не CommandManager знает об изменении условий, которое изменяет возможность выполнения команды. В таких случаях можно принудительно CommandManager вызвать RequerySuggested событие , вызвав InvalidateRequerySuggested метод . Это, в свою очередь, вызовет RoutedCommandCanExecuteChanged событие .