RoutedCommand.CanExecuteChanged イベント

定義

コマンド ソースに対する変更がコマンド マネージャーによって検出されたときに発生します。 これらの変更は、多くの場合、現在のコマンドの対象に対してコマンドを実行するかどうかに影響します。

public:
 virtual event EventHandler ^ CanExecuteChanged;
public event EventHandler CanExecuteChanged;
member this.CanExecuteChanged : EventHandler 
Public Custom Event CanExecuteChanged As EventHandler 

イベントの種類

実装

次の例は、 の CanExecuteChanged カスタム実装 ICommandSourceのイベント ハンドラーです。

this.Command この例では、 の Command プロパティです ICommandSource。 コマンドが でない null場合、コマンドは に RoutedCommandキャストされます。 コマンドが の場合、 RoutedCommandメソッドは と を CanExecute 渡して CommandTarget 呼び出されます CommandParameter。 command が ではない RoutedCommand場合は に ICommand キャストされ、 CanExecute メソッドは を CommandParameter渡して呼び出されます。

メソッドが を CanExecute 返す true場合、コントロールは有効になります。それ以外の場合、コントロールは無効になります。

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

注釈

RoutedCommand 、 によって発生する イベントをリッスン RequerySuggested します CommandManager。 イベントは RequerySuggested 、キーボード フォーカスの変更など、コマンドを実行する必要があるかどうかを変更する可能性がある条件が満たされるたびに発生します。 コマンドがイベントを RequerySuggested 受信すると、 イベントが発生します CanExecuteChanged 。 通常、コマンド ソースはこのイベントをリッスンし、 メソッドを使用して を RoutedCommand クエリします CanExecute 。 コマンド バインドの一部として、コマンドを実行できない場合、ほとんどのコマンド ソースは自身を無効にします。 この例は、コマンドを MenuItem 実行できない場合に灰色表示になる場合です。

状況によっては、 CommandManager はコマンドの実行機能を変更する条件の変更を認識しきらない場合があります。 このような場合は、 メソッドをCommandManager呼び出して 強制的に イベントをInvalidateRequerySuggestedRequerySuggested発生させることができます。これにより、 によって RoutedCommand イベントが発生しますCanExecuteChanged

適用対象