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


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

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