Condividi tramite


RoutedCommand.CanExecuteChanged Evento

Definizione

Si verifica quando le modifiche all'origine del comando vengono rilevate dal gestore comandi. Queste modifiche spesso influiscono sul fatto che il comando debba essere eseguito nella destinazione del comando corrente.

public:
 virtual event EventHandler ^ CanExecuteChanged;
public event EventHandler CanExecuteChanged;
member this.CanExecuteChanged : EventHandler 
Public Custom Event CanExecuteChanged As EventHandler 

Tipo evento

Implementazioni

Esempio

L'esempio seguente è un CanExecuteChanged gestore eventi di un'implementazione personalizzata di ICommandSource.

this.Command in questo esempio è la Command proprietà dell'oggetto ICommandSource. Se il comando non nullè , viene eseguito il cast del comando a un oggetto RoutedCommand. Se il comando è un RoutedCommand, il CanExecute metodo viene chiamato passando CommandTarget e CommandParameter. Se il comando non è un RoutedCommand, viene eseguito il cast a un ICommand oggetto e il CanExecute metodo viene chiamato passando .CommandParameter

Se il CanExecute metodo restituisce true, il controllo è abilitato; in caso contrario, il controllo è disabilitato.

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

Commenti

L'oggetto RoutedCommand è in ascolto dell'evento RequerySuggested , generato dall'oggetto CommandManager. L'evento RequerySuggested viene generato ogni volta che vengono soddisfatte condizioni che possono modificare se il comando deve essere eseguito, ad esempio una modifica dello stato attivo della tastiera. Quando il comando riceve l'evento RequerySuggested , genera l'evento CanExecuteChanged . In genere, l'origine del comando sarà in ascolto di questo evento ed eseguirà una query tramite RoutedCommand il CanExecute metodo . La maggior parte delle origini dei comandi si disabilita se il comando non può essere eseguito, come parte dell'associazione di comandi. Un esempio è quando un MenuItem grigio quando non è possibile eseguire il comando.

In alcune situazioni, l'oggetto CommandManager non è a conoscenza di una modifica delle condizioni che modificano la capacità di eseguire un comando. In questi casi, è possibile forzare l'oggetto CommandManager per generare l'evento RequerySuggested chiamando il InvalidateRequerySuggested metodo , che a sua volta causerà la RoutedCommand generazione dell'evento CanExecuteChanged .

Si applica a