RoutedCommand.CanExecuteChanged RoutedCommand.CanExecuteChanged RoutedCommand.CanExecuteChanged RoutedCommand.CanExecuteChanged Event

定義

コマンド ソースに対する変更がコマンド マネージャーによって検出されたときに発生します。Occurs when changes to the command source are detected by the command manager. これらの変更は、多くの場合、現在のコマンドの対象に対してコマンドを実行するかどうかに影響します。These changes often affect whether the command should execute on the current command target.

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

実装

次の例は、 CanExecuteChangedICommandSourceカスタム実装のイベントハンドラーです。The following example is a CanExecuteChanged event handler from a custom implementation of ICommandSource.

this.Commandこの例ではCommand 、のICommandSourceプロパティはです。this.Command in this example is the Command property on the ICommandSource. コマンドがでないnull場合、コマンドはRoutedCommandにキャストされます。If the command is not null, the command is cast to a RoutedCommand. コマンドがRoutedCommandの場合、 CanExecute CommandTargetメソッドがCommandParameter呼び出され、とが渡されます。If the command is a RoutedCommand, then the CanExecute method is called passing the CommandTarget and the CommandParameter. RoutedCommandコマンドがでない場合は、 ICommandにキャストされ、 CanExecuteメソッドはを渡しCommandParameterて呼び出されます。If command is not a RoutedCommand, it is cast to an ICommand and the CanExecute method is called passing the CommandParameter.

メソッドがを返しtrueた場合は、コントロールが有効になります。それ以外の場合、コントロールは無効になります。 CanExecuteIf the CanExecute method returns true, then the control is enabled; otherwise, the control is disabled.

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

注釈

RoutedCommandRequerySuggestedイベントをリッスンします。これは、 CommandManagerによって発生します。The RoutedCommand listens for the RequerySuggested event, which is raised by the CommandManager. RequerySuggestedイベントは、キーボードフォーカスの変更など、コマンドを実行する必要があるかどうかを変更する条件が満たされたときに発生します。The RequerySuggested event is raised whenever conditions are met that may change the whether the command should execute, such as a change in keyboard focus. コマンドがRequerySuggestedイベントを受け取ると、 CanExecuteChangedイベントが発生します。When the command receives the RequerySuggested event, it raises the CanExecuteChanged event. 一般に、コマンドソースはこのイベントをリッスンし、 RoutedCommand CanExecuteメソッドを使用してクエリを実行します。Generally, the command source will listen for this event and query the RoutedCommand by way of the CanExecute method. コマンドのバインドの一部として、コマンドを実行できない場合は、ほとんどのコマンドソースがそれ自体を無効にします。Most command sources will disable themselves if the command cannot be executed, as part of their command binding. この例として、コマンドMenuItemを実行できないときにがグレーになる場合があります。An example of this is when a MenuItem grays itself out when the command cannot be executed.

場合によってはCommandManager 、実行するコマンドの機能を変更する条件の変更がによって認識されないことがあります。In some situations, the CommandManager is unaware of a change in conditions that alters the ability of a command to execute. このような場合は、がCommandManager InvalidateRequerySuggestedメソッドを呼び出してRequerySuggestedイベントを発生させるように強制することができRoutedCommandます。これCanExecuteChangedにより、によってイベントが発生します。In these cases, you can force the CommandManager to raises the RequerySuggested event by calling the InvalidateRequerySuggested method, this will in turn cause the RoutedCommand to raise the CanExecuteChanged event.

適用対象