Aracılığıyla paylaş


RoutedCommand.CanExecuteChanged Olay

Tanım

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.

Şunlara uygulanır