RoutedCommand.CanExecuteChanged Evento

Definição

Ocorre quando alterações à fonte de comandos são detetadas pelo gestor de comandos. Estas alterações afetam frequentemente se o comando deve ser executado no alvo atual do comando.

public:
 virtual event EventHandler ^ CanExecuteChanged;
public event EventHandler CanExecuteChanged;
member this.CanExecuteChanged : EventHandler 
Public Custom Event CanExecuteChanged As EventHandler 

Tipo de Evento

Implementações

Exemplos

O exemplo seguinte é um CanExecuteChanged gestor de eventos de uma implementação personalizada de ICommandSource.

this.Command neste exemplo é a Command propriedade sobre o ICommandSource. Se o comando não nullfor , o comando é lançado para um RoutedCommand. Se o comando for um RoutedCommand, então o CanExecute método é chamado passar o CommandTarget e o CommandParameter. Se o comando não for um RoutedCommand, ele é lançado para um ICommand e o CanExecute método é chamado passar o CommandParameter.

Se o CanExecute método devolver true, então o controlo está ativado; caso contrário, o controlo fica desativado.

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

Observações

As RoutedCommand escutas para o RequerySuggested evento, que é elevada pelo CommandManager. O RequerySuggested evento é ativado sempre que são cumpridas condições que podem alterar a execução do comando, como uma alteração no foco do teclado. Quando o comando recebe o RequerySuggested evento, eleva-o CanExecuteChanged . Geralmente, a fonte do comando vai ouvir este evento e interrogá-lo RoutedCommand através do CanExecute método. A maioria das fontes de comandos desativa-se se o comando não puder ser executado, como parte da ligação de comandos. Um exemplo disto é quando um MenuItem se desliga quando o comando não pode ser executado.

Em algumas situações, o CommandManager desconhece uma alteração nas condições que altera a capacidade de um comando de ser executado. Nestes casos, pode forçar o CommandManager a aumentar o RequerySuggested evento chamando o InvalidateRequerySuggested método, o que por sua vez fará com que o RoutedCommand eleve o CanExecuteChanged evento.

Aplica-se a