Поделиться через


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 событие .

Применяется к