RoutedCommand.CanExecuteChanged Evento
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Si verifica quando le modifiche all'origine del comando vengono rilevate dal gestore comandi. Queste modifiche spesso influiscono sul fatto che il comando debba essere eseguito nella destinazione del comando corrente.
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à dell'oggetto ICommandSource. Se il comando non nullè , viene eseguito il cast del comando a un oggetto RoutedCommand. Se il comando è un RoutedCommand, il CanExecute metodo viene chiamato passando CommandTarget e CommandParameter. Se il comando non è un RoutedCommand, viene eseguito il cast a un ICommand oggetto e il CanExecute metodo viene chiamato passando .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 dall'oggetto 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 tramite RoutedCommand 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 MenuItem grigio quando non è possibile eseguire il comando.
In alcune situazioni, l'oggetto CommandManager non è a conoscenza di una modifica delle 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 , che a sua volta causerà la RoutedCommand generazione dell'evento CanExecuteChanged .