RoutedCommand.CanExecuteChanged Événement
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Se produit lorsque les modifications apportées à la source de commande sont détectées par le gestionnaire de commandes. Ces modifications affectent souvent si la commande doit s’exécuter sur la cible de commande actuelle.
public:
virtual event EventHandler ^ CanExecuteChanged;
public event EventHandler CanExecuteChanged;
member this.CanExecuteChanged : EventHandler
Public Custom Event CanExecuteChanged As EventHandler
Type d'événement
Implémente
Exemples
L’exemple suivant est un gestionnaire d’événements CanExecuteChanged à partir d’une implémentation personnalisée de ICommandSource.
this.Command dans cet exemple est la Command propriété sur le ICommandSource. Si la commande n’est pas null, la commande est castée en un RoutedCommand. Si la commande est un RoutedCommand, la CanExecute méthode est appelée en passant le CommandTarget et le CommandParameter. Si la commande n’est pas un RoutedCommand, elle est convertie en un ICommand et la CanExecute méthode est appelée en passant le CommandParameter.
Si la CanExecute méthode retourne true, le contrôle est activé ; sinon, le contrôle est désactivé.
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
Remarques
Écoute l’événement RoutedCommandRequerySuggested , qui est déclenché par le CommandManager. L’événement RequerySuggested est déclenché chaque fois que des conditions sont remplies, ce qui peut modifier si la commande doit s’exécuter, par exemple une modification du focus clavier. Lorsque la commande reçoit l’événement RequerySuggested , elle déclenche l’événement CanExecuteChanged . En règle générale, la source de commande écoute cet événement et interroge la RoutedCommandCanExecute méthode. La plupart des sources de commandes se désactivent si la commande ne peut pas être exécutée, dans le cadre de leur liaison de commandes. Par exemple, lorsqu’un MenuItem gris est grisé lorsque la commande ne peut pas être exécutée.
Dans certaines situations, il CommandManager n’est pas conscient d’un changement dans les conditions qui modifient la capacité d’une commande à exécuter. Dans ces cas, vous pouvez forcer le CommandManager déclenchement de l’événement RequerySuggested en appelant la InvalidateRequerySuggested méthode, ce qui entraîne à son tour la RoutedCommand déclenchement de l’événement CanExecuteChanged .