Condividi tramite


RoutedCommand.CanExecuteChanged Evento

Definizione

Si verifica quando vengono rilevate modifiche all'origine comando da parte del gestore del comando. Queste modifiche spesso influiscono sull'esecuzione del comando in corrispondenza della destinazione corrente del comando.

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à di ICommandSource. Se il comando non nullè , viene eseguito il cast del comando a un oggetto RoutedCommand. Se il comando è un RoutedCommandoggetto , il CanExecute metodo viene chiamato passando e CommandTarget .CommandParameter Se il comando non è un RoutedCommand, viene eseguito il cast a un ICommand oggetto e il CanExecute metodo viene chiamato passando l'oggetto 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 da 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 RoutedCommand tramite 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'eccezione MenuItem viene disattivata quando il comando non può essere eseguito.

In alcune situazioni, l'oggetto CommandManager non è a conoscenza di una modifica nelle 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 , a sua volta causerà la generazione dell'evento RoutedCommand da parte di CanExecuteChanged .

Si applica a