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является, она выполняется приведение к объекту ICommand и CanExecute вызывается методом, который передается 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
Комментарии
Прослушивает RoutedCommandRequerySuggested событие, которое вызывается CommandManager. Событие RequerySuggested возникает всякий раз, когда выполняются условия, которые могут изменить, должна ли выполняться команда, например изменение фокуса клавиатуры. Когда команда получает RequerySuggested событие, он вызывает CanExecuteChanged событие. Как правило, источник команды будет прослушивать это событие и запрашивать RoutedCommand его по методу CanExecute . Большинство источников команд отключают себя, если команда не может быть выполнена в рамках их привязки команды. Примером этого является то, когда MenuItem не удается выполнить команду серым цветом.
В некоторых ситуациях CommandManager не известно об изменении условий, которые изменяют способность выполнения команды. В таких случаях можно CommandManagerRequerySuggested принудительно вызвать событие InvalidateRequerySuggested , вызвав метод, это, в свою очередь, приведет RoutedCommand к возникновению CanExecuteChanged события.