다음을 통해 공유


RoutedCommand.CanExecuteChanged 이벤트

정의

명령 관리자가 명령 소스에 대한 변경 내용을 감지하는 경우 발생합니다. 이러한 변경 내용은 대개 현재 명령 대상에서 명령을 실행해야 하는지 여부에 영향을 줍니다.

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

이벤트 유형

구현

예제

다음 예제는 의 사용자 지정 구현에서 이벤트 처리기입니다 CanExecuteChangedICommandSource.

this.Command 이 예제에서는 의 Command 속성입니다 ICommandSource. 명령이 이 아니면 null명령이 로 RoutedCommand캐스팅됩니다. 명령이 이 RoutedCommand면 메서드가 CanExecute 및 을 CommandTarget 전달합니다 CommandParameter. 명령이 가 아닌 경우 으로 RoutedCommandICommand 캐스팅되고 메서드가 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 은 명령의 실행 기능을 변경하는 조건의 변경을 인식하지 못합니다. 이러한 경우 메서드를 호출 InvalidateRequerySuggested 하여 를 강제로 CommandManager 이벤트를 발생 RequerySuggested 시킬 수 있으며, 이로 인해 RoutedCommand 가 이벤트를 발생시킬 CanExecuteChanged 수 있습니다.

적용 대상