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 le gestionnaire de commandes détecte des modifications de la source de la commande. Ces modifications déterminent souvent si la commande doit s'exécuter sur la cible de la 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 convertie en .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 et ICommand 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 RoutedCommand l’événement RequerySuggested , qui est déclenché par le CommandManager. L’événement RequerySuggested est déclenché chaque fois que des conditions sont remplies qui peuvent 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 le RoutedCommand par le biais de la CanExecute 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 commande. C’est le cas, par exemple, lorsqu’un MenuItem est grisé lorsque la commande ne peut pas être exécutée.
Dans certaines situations, le CommandManager n’est pas conscient d’une modification des conditions qui modifie la capacité d’exécution d’une commande. Dans ce cas, vous pouvez forcer le CommandManager à déclencher l’événement RequerySuggested en appelant la InvalidateRequerySuggested méthode , ce qui entraîne à son tour le RoutedCommand déclencher CanExecuteChanged .