Freigeben über


RoutedCommand.CanExecuteChanged Ereignis

Definition

Tritt ein, wenn vom Befehl-Manager Änderungen an der Befehlsquelle erkannt werden. Diese Änderungen beeinflussen die Ausführung des Befehls für das aktuelle Befehlsziel.

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.Commandin diesem Beispiel ist die Command -Eigenschaft für .ICommandSource Wenn der Befehl nicht nullist, wird der Befehl in eine RoutedCommandumgewandelt. Wenn der Befehl ein RoutedCommandist, wird die CanExecute -Methode aufgerufen und übergeben.CommandTargetCommandParameter Wenn der Befehl kein RoutedCommandist, wird er in ein ICommand umgewandelt, und die CanExecute -Methode wird aufgerufen und übergeben.CommandParameter

Wenn die CanExecute -Methode zurückgibt 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

Der RoutedCommand lauscht auf das RequerySuggested -Ereignis, das vom CommandManagerausgelöst wird. Das RequerySuggested -Ereignis wird ausgelöst, wenn Bedingungen erfüllt sind, die sich ä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 das RoutedCommand über die CanExecute -Methode ab. Die meisten Befehlsquellen deaktivieren sich selbst, wenn der Befehl nicht im Rahmen ihrer Befehlsbindung ausgeführt werden kann. Ein Beispiel hierfür ist, wenn sich ein MenuItem abblendet, wenn der Befehl nicht ausgeführt werden kann.

In einigen Situationen ist keine CommandManager Änderung der Bedingungen bekannt, die die Ausführungsfähigkeit eines Befehls beeinträchtigen. 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 RoutedCommand -Ereignis ausgelöst CanExecuteChanged wird.

Gilt für: