RoutedCommand.CanExecuteChanged Evento
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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.