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 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.Command
in diesem Beispiel ist die Command -Eigenschaft für .ICommandSource Wenn der Befehl nicht null
ist, 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.