Im folgenden Beispiel wird ein CanExecuteChanged-Ereignishandler aus einer benutzerdefinierten Implementierung von ICommandSource dargestellt. Im vollständigen Beispiel wird die Slider-Klasse in Unterklassen unterteilt und ICommandSource wird implementiert, um einen Schieberegler zu erstellen, der einen Befehl aufruft, wenn die Werteigenschaft geändert wird. Das vollständige Beispiel finden Sie unter Beispiel für das Implementieren von "ICommandSource".
In diesem Beispiel stellt this.Command die Command-Eigenschaft für die ICommandSource dar. Wenn der Befehl nicht nullNothingnullptrNULL-Verweis (Nothing in Visual Basic) ist, wird der Befehl in einen RoutedCommand umgewandelt. Wenn es sich um einen RoutedCommand-Befehl handelt, wird die CanExecute-Methode aufgerufen und CommandTarget und CommandParameter werden übergeben. Wenn es sich nicht um einen RoutedCommand-Befehl handelt, wird der Befehl in einen ICommand umgewandelt. Außerdem wird die CanExecute-Methode aufgerufen, und der CommandParameter wird übergeben.
Wenn die CanExecute-Methode true zurückgibt, ist das Steuerelement aktiviert.
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;
}
}
}
}