RoutedCommand.CanExecuteChanged Händelse

Definition

Inträffar när ändringar i kommandokällan identifieras av kommandohanteraren. Dessa ändringar påverkar ofta om kommandot ska köras på det aktuella kommandomålet.

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

Händelsetyp

Implementeringar

Exempel

Följande exempel är en CanExecuteChanged händelsehanterare från en anpassad implementering av ICommandSource.

this.Command i det här exemplet är egenskapen CommandICommandSource. Om kommandot inte nullär , skickas kommandot till en RoutedCommand. Om kommandot är en RoutedCommandCanExecute anropas metoden för att skicka CommandTarget och CommandParameter. Om kommandot inte är en RoutedCommandomvandlas det ICommand till en CanExecute och metoden kallas för att skicka CommandParameter.

CanExecute Om metoden returnerar trueaktiveras kontrollen. Annars inaktiveras kontrollen.

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

Kommentarer

Lyssnar RoutedCommand efter RequerySuggested händelsen, som genereras av CommandManager. Händelsen RequerySuggested utlöses när villkor uppfylls som kan ändra om kommandot ska köras, till exempel en ändring i tangentbordsfokus. När kommandot tar emot RequerySuggested händelsen genereras CanExecuteChanged händelsen. I allmänhet lyssnar kommandokällan efter den här händelsen och frågar RoutedCommand med metoden CanExecute . De flesta kommandokällor inaktiverar sig själva om kommandot inte kan köras, som en del av deras kommandobindning. Ett exempel på detta är när en MenuItem grå ut sig själv när kommandot inte kan köras.

I vissa situationer CommandManager är inte medveten om en ändring i villkor som ändrar möjligheten för ett kommando att köra. I dessa fall kan du framtvinga CommandManager att händelsen höjs RequerySuggested genom att anropa InvalidateRequerySuggested metoden, vilket i sin tur leder RoutedCommand till att händelsen höjs CanExecuteChanged .

Gäller för