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 as alterações na origem do comando são detectadas pelo gerenciador de comandos. Essas alterações geralmente 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 está a Command propriedade no ICommandSource. Se o comando não nullestiver, o comando será convertido em um RoutedCommand. Se o comando for umRoutedCommand, o CanExecute método será chamado passando o CommandTarget .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
A RoutedCommand escuta do RequerySuggested evento, que é gerado pelo CommandManager. O RequerySuggested evento é gerado sempre que são atendidas condições 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á por RoutedCommand 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 comandos. Um exemplo disso é quando um MenuItem cinza se esmaee quando o comando não pode ser executado.
Em algumas situações, não CommandManager há conhecimento de uma alteração nas condições que altera a capacidade de um comando a ser executado. Nesses casos, você pode forçar a CommandManager geração do RequerySuggested evento chamando o InvalidateRequerySuggested método, isso, por sua vez, fará com que o RoutedCommandCanExecuteChanged evento seja gerado.