RoutedCommand.CanExecuteChanged Händelse
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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 Command på ICommandSource. 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 .