Freigeben über


RoutedCommand.CanExecuteChanged Ereignis

Definition

Tritt auf, wenn Änderungen an der Befehlsquelle vom Befehls-Manager erkannt werden. Diese Änderungen wirken sich häufig darauf aus, ob der Befehl auf dem aktuellen Befehlsziel ausgeführt werden soll.

public:
 virtual event EventHandler ^ CanExecuteChanged;
public event EventHandler CanExecuteChanged;
member this.CanExecuteChanged : EventHandler 
Public Custom Event CanExecuteChanged As EventHandler 

Ereignistyp

Implementiert

Beispiele

Das folgende Beispiel ist ein CanExecuteChanged Ereignishandler aus einer benutzerdefinierten Implementierung von ICommandSource.

this.Command in diesem Beispiel ist die Command Eigenschaft für die ICommandSource. Wenn der Befehl nicht nullist, wird der Befehl in ein RoutedCommand. Wenn der Befehl ein RoutedCommandist, wird die CanExecute Methode aufgerufen, die und CommandTarget die .CommandParameter Wenn es sich nicht um einen RoutedCommandBefehl handelt, wird er in eine ICommand Umwandlung umgezogen, und die CanExecute Methode wird aufgerufen, um die CommandParameter.

Wenn die CanExecute Methode zurückgegeben wird true, ist das Steuerelement aktiviert. Andernfalls ist das Steuerelement deaktiviert.

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

Hinweise

Die RoutedCommand Lauschen auf das RequerySuggested Ereignis, das von der CommandManager. Das RequerySuggested Ereignis wird ausgelöst, wenn Bedingungen erfüllt sind, die ändern können, ob der Befehl ausgeführt werden soll, z. B. eine Änderung des Tastaturfokus. Wenn der Befehl das RequerySuggested Ereignis empfängt, löst er das CanExecuteChanged Ereignis aus. Im Allgemeinen lauscht die Befehlsquelle auf dieses Ereignis und fragt die RoutedCommand Methode ab CanExecute . Die meisten Befehlsquellen deaktivieren sich selbst, wenn der Befehl nicht ausgeführt werden kann, als Teil der Befehlsbindung. Ein Beispiel hierfür ist, wenn sich ein MenuItem graues Element ausgraut, wenn der Befehl nicht ausgeführt werden kann.

In einigen Fällen ist die CommandManager Änderung der Bedingungen nicht bewusst, die die Ausführungsfähigkeit eines Befehls ändern. In diesen Fällen können Sie erzwingen, dass das CommandManagerRequerySuggested Ereignis ausgelöst wird, indem Sie die InvalidateRequerySuggested Methode aufrufen. Dies führt wiederum dazu, dass das RoutedCommandCanExecuteChanged Ereignis ausgelöst wird.

Gilt für: