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 vengono rilevate modifiche all'origine comando da parte del gestore del comando. Queste modifiche spesso influiscono sull'esecuzione del comando in corrispondenza della destinazione corrente del comando.
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à di ICommandSource. Se il comando non null
è , viene eseguito il cast del comando a un oggetto RoutedCommand. Se il comando è un RoutedCommandoggetto , il CanExecute metodo viene chiamato passando e CommandTarget .CommandParameter Se il comando non è un RoutedCommand, viene eseguito il cast a un ICommand oggetto e il CanExecute metodo viene chiamato passando l'oggetto 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 da 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 RoutedCommand tramite 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'eccezione MenuItem viene disattivata quando il comando non può essere eseguito.
In alcune situazioni, l'oggetto CommandManager non è a conoscenza di una modifica nelle 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 , a sua volta causerà la generazione dell'evento RoutedCommand da parte di CanExecuteChanged .