RoutedCommand.CanExecuteChanged Olay
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Komut kaynağında yapılan değişiklikler komut yöneticisi tarafından algılandığında gerçekleşir. Bu değişiklikler genellikle komutun geçerli komut hedefinde yürütülip yürütülmeyeceğini etkiler.
public:
virtual event EventHandler ^ CanExecuteChanged;
public event EventHandler CanExecuteChanged;
member this.CanExecuteChanged : EventHandler
Public Custom Event CanExecuteChanged As EventHandler
Olay Türü
Uygulamalar
Örnekler
Aşağıdaki örnek, özel uygulamasından CanExecuteChanged bir olay işleyicisidir ICommandSource.
this.Command bu örnekte , üzerindeki özelliğidir CommandICommandSource. komutu değilse null, komutu öğesine RoutedCommandyayınlanır. Komut bir RoutedCommandCanExecute ise ve değerini geçirme CommandTargetCommandParameteryöntemi olarak adlandırılır. Komut bir RoutedCommanddeğilse, öğesine yayınlanır ICommand ve CanExecute yöntemi geçirilirken çağrılır CommandParameter.
CanExecute yöntemi döndürürsetrue, denetim etkinleştirilir; aksi takdirde denetim devre dışı bırakılır.
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
Açıklamalar
, RoutedCommand tarafından CommandManagertetiklenen olayı dinlerRequerySuggested. Olay RequerySuggested , klavye odağındaki bir değişiklik gibi komutun yürütülip yürütülmeyeceğini değiştirebilecek koşullar karşılandığında tetiklenir. Komut olayı aldığında RequerySuggested olayı tetikler CanExecuteChanged . Genellikle komut kaynağı bu olayı dinler ve yöntemini kullanarak RoutedCommand sorgular CanExecute . Komutun yürütülememesi durumunda komut kaynaklarının çoğu, komut bağlamalarının bir parçası olarak kendilerini devre dışı bırakır. Bunun bir örneği, komut yürütülemediğinde bir MenuItem grinin kendisini dışarı çıkarmış olmasıdır.
Bazı durumlarda, CommandManager bir komutun yürütülme becerisini değiştiren koşullardaki bir değişikliğin farkında değildir. Bu gibi durumlarda yöntemini çağırarak InvalidateRequerySuggested öğesini olayı tetiklemeye RequerySuggested zorlayabilirsinizCommandManager, bu da olayın yükseltilmesine RoutedCommandCanExecuteChanged neden olur.