Sdílet prostřednictvím


RoutedCommand.CanExecuteChanged Událost

Definice

Nastane, když správce příkazů zjistí změny ve zdroji příkazů. Tyto změny často ovlivňují, jestli se má příkaz spustit v aktuálním cíli příkazu.

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

Event Type

Implementuje

Příklady

Následující příklad je obslužná rutina CanExecuteChanged události z vlastní implementace ICommandSource.

this.Command v tomto příkladu Command je vlastnost v objektu ICommandSource. Pokud příkaz není null, příkaz se přetypuje na .RoutedCommand Pokud je příkazem RoutedCommand, pak CanExecute metoda se nazývá předávání CommandTarget a CommandParameter. Pokud příkaz není RoutedCommand, je přetypován na a ICommandCanExecute metoda je volána předání CommandParameter.

Pokud metoda CanExecute vrátí true, pak je ovládací prvek povolen; jinak je ovládací prvek zakázán.

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

Poznámky

Naslouchá RoutedCommand události RequerySuggested , která je vyvolána CommandManager. Událost RequerySuggested se vyvolá vždy, když jsou splněny podmínky, které mohou změnit, zda má být příkaz proveden, například změna fokusu klávesnice. Když příkaz přijme RequerySuggested událost, vyvolá CanExecuteChanged událost. Obecně platí, že zdroj příkazu bude naslouchat této události a dotazovat RoutedCommand se metodou CanExecute . Většina zdrojů příkazů se zakáže, pokud příkaz nelze spustit jako součást jejich vazby příkazů. Příkladem je, že MenuItem když se příkaz nespustí, zobrazí se šedě.

V některých situacích neví o CommandManager změně podmínek, které mění schopnost příkazu provést. V těchto případech můžete vynutit CommandManagerRequerySuggested vyvolání události voláním InvalidateRequerySuggested metody, což zase způsobí RoutedCommand vyvolání CanExecuteChanged události.

Platí pro