Partager via


RoutedCommand.CanExecuteChanged Événement

Définition

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 .

S’applique à