RoutedCommand.CanExecuteChanged Ereignis
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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.