RoutedCommand.CanExecuteChanged Evento
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Se produce cuando el administrador del comando detecta cambios en el origen del comando. Normalmente, estos cambios afectan al hecho de que el comando se ejecute en el destino de comando actual.
public:
virtual event EventHandler ^ CanExecuteChanged;
public event EventHandler CanExecuteChanged;
member this.CanExecuteChanged : EventHandler
Public Custom Event CanExecuteChanged As EventHandler
Tipo de evento
Implementaciones
Ejemplos
El ejemplo siguiente es un CanExecuteChanged controlador de eventos de una implementación personalizada de ICommandSource.
this.Command
en este ejemplo es la Command propiedad de .ICommandSource Si el comando no null
es , el comando se convierte en .RoutedCommand Si el comando es , RoutedCommandse llama al CanExecute método pasando y CommandTarget .CommandParameter Si el comando no es , RoutedCommandse convierte en y ICommand se llama al CanExecute método pasando .CommandParameter
Si el CanExecute método devuelve true
, el control está habilitado; de lo contrario, el control está deshabilitado.
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
Comentarios
RoutedCommand escucha el RequerySuggested evento , que genera .CommandManager El RequerySuggested evento se genera cada vez que se cumplen las condiciones que pueden cambiar si se debe ejecutar el comando, como un cambio en el foco del teclado. Cuando el comando recibe el RequerySuggested evento , genera el CanExecuteChanged evento . Por lo general, el origen del comando escuchará este evento y consultará mediante RoutedCommand el CanExecute método . La mayoría de los orígenes de comandos se deshabilitarán si el comando no se puede ejecutar, como parte de su enlace de comandos. Un ejemplo de esto es cuando un MenuItem gris se agota cuando no se puede ejecutar el comando.
En algunas situaciones, no CommandManager es consciente de un cambio en las condiciones que modifican la capacidad de ejecutar un comando. En estos casos, puede forzar que CommandManager genere el RequerySuggested evento mediante una llamada al InvalidateRequerySuggested método , lo que provocará, a su vez, que RoutedCommand genere el CanExecuteChanged evento.