Compartir a través de


RoutedCommand.CanExecuteChanged Evento

Definición

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.Commanden este ejemplo es la Command propiedad de .ICommandSource Si el comando no nulles , 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.

Se aplica a