다음을 통해 공유


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. 명령이 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 의해 CommandManager발생하는 이벤트를 수신 대기 RequerySuggested 합니다. 이 RequerySuggested 이벤트는 키보드 포커스의 변경과 같이 명령을 실행할지 여부를 변경할 수 있는 조건이 충족될 때마다 발생합니다. 명령이 이벤트를 수신 RequerySuggested 하면 이벤트가 발생합니다 CanExecuteChanged . 일반적으로 명령 소스는 이 이벤트를 수신 대기하고 메서드를 RoutedCommand 통해 쿼리합니다 CanExecute . 명령 바인딩의 일부로 명령을 실행할 수 없는 경우 대부분의 명령 원본은 자신을 사용하지 않도록 설정합니다. 예를 들어 명령을 실행할 수 없을 때 MenuItem 회색으로 표시됩니다.

경우에 따라 CommandManager 명령 실행 기능을 변경하는 조건의 변경을 인식하지 못합니다. 이러한 경우 메서드를 호출 InvalidateRequerySuggested 하여 강제로 이벤트를 발생 RequerySuggested 시킬 수 있으며CommandManager, 이로 인해 RoutedCommand 이벤트가 발생합니다CanExecuteChanged.

적용 대상