Udostępnij za pośrednictwem


RoutedCommand.CanExecuteChanged Zdarzenie

Definicja

Występuje, gdy zmiany w źródle poleceń są wykrywane przez menedżera poleceń. Te zmiany często mają wpływ na to, czy polecenie powinno zostać wykonane w bieżącym obiekcie docelowym polecenia.

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

Typ zdarzenia

Implementuje

Przykłady

Poniższy przykład to CanExecuteChanged procedura obsługi zdarzeń z niestandardowej implementacji programu ICommandSource.

this.Command w tym przykładzie Command jest to właściwość w obiekcie ICommandSource. Jeśli polecenie nie nullma wartości , polecenie zostanie oddane do .RoutedCommand Jeśli polecenie jest poleceniem RoutedCommand, CanExecute metoda jest wywoływana, przekazując element CommandTarget i CommandParameter. Jeśli polecenie nie jest elementem RoutedCommand, jest rzutowanie do elementu ICommand , a CanExecute metoda jest wywoływana przekazując element CommandParameter.

CanExecute Jeśli metoda zwróci truewartość , kontrolka jest włączona. W przeciwnym razie kontrolka jest wyłączona.

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

Uwagi

Nasłuchuje RoutedCommandRequerySuggested zdarzenia, które jest wywoływane przez element CommandManager. Zdarzenie RequerySuggested jest wywoływane za każdym razem, gdy zostaną spełnione warunki, które mogą zmienić, czy polecenie powinno zostać wykonane, na przykład zmiana fokusu klawiatury. Gdy polecenie odbiera RequerySuggested zdarzenie, zgłasza CanExecuteChanged zdarzenie. Ogólnie rzecz biorąc, źródło polecenia będzie nasłuchiwać tego zdarzenia i wykonywać zapytania RoutedCommand za pomocą CanExecute metody . Większość źródeł poleceń wyłączy się, jeśli nie można wykonać polecenia w ramach powiązania polecenia. Przykładem jest to, że gdy MenuItem polecenie nie może zostać wykonane, zostanie wyszarane.

W niektórych sytuacjach nie wiadomo o CommandManager zmianie warunków, które zmieniają możliwość wykonywania polecenia. W takich przypadkach można wymusić CommandManager wywołanie RequerySuggested zdarzenia przez wywołanie InvalidateRequerySuggested metody . Spowoduje RoutedCommandCanExecuteChanged to wystąpienie zdarzenia.

Dotyczy