RoutedCommand.CanExecuteChanged Evento
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Ocorre quando alterações na fonte de comando são detectadas pelo gerenciador de comandos. Geralmente, essas alterações afetam se o comando deve ser executado no destino de comando atual.
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 a seguir é um CanExecuteChanged manipulador de eventos de uma implementação personalizada de ICommandSource.
this.Command
neste exemplo, é a Command propriedade no ICommandSource. Se o comando não null
for , o comando será convertido em um RoutedCommand. Se o comando for um RoutedCommand, o CanExecute método será chamado passando o CommandTarget e o CommandParameter. Se o comando não for um RoutedCommand, ele será convertido em um ICommand e o CanExecute método será chamado passando o CommandParameter.
Se o CanExecute método retornar true
, o controle será habilitado; caso contrário, o controle será desabilitado.
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
Comentários
O RoutedCommand escuta o RequerySuggested evento , que é gerado pelo CommandManager. O RequerySuggested evento é gerado sempre que as condições são atendidas que podem alterar se o comando deve ser executado, como uma alteração no foco do teclado. Quando o comando recebe o RequerySuggested evento, ele aciona o CanExecuteChanged evento. Em geral, a origem do comando escutará esse evento e consultará o RoutedCommand por meio do CanExecute método . A maioria das fontes de comando será desabilitada se o comando não puder ser executado, como parte de sua associação de comando. Um exemplo disso é quando um MenuItem cinza se esgota 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 executar um comando. Nesses casos, você pode forçar o CommandManager a gerar o RequerySuggested evento chamando o InvalidateRequerySuggested método , isso, por sua vez, fará com que o RoutedCommand gere o CanExecuteChanged evento.