Partager via


RoutedCommand.CanExecuteChanged Événement

Définition

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 .

S’applique à