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. Komut değilse null, komutu öğesine RoutedCommandyayınlanır. Komut bir RoutedCommandCanExecute ise ve değerini geçirmek CommandTarget için yöntemi çağrılırCommandParameter. Komut bir RoutedCommanddeğilse, öğesine yayınlanır ICommand ve CanExecute yöntemi geçirilirken çağrılır CommandParameter.

CanExecute yöntem döndürürse truedenetim 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 CommandManageroluşturulan 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 sorgular RoutedCommandCanExecute . 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. Buna örnek olarak, komut yürütülemediğinde bir MenuItem gri görüntülenir.

Bazı durumlarda, CommandManager bir komutun yürütülme yeteneğini 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ın tetiklesine RoutedCommandCanExecuteChanged neden olur.

Şunlara uygulanır