RoutedCommand.CanExecuteChanged 이벤트
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
명령 관리자가 명령 원본에 대한 변경 내용을 검색할 때 발생합니다. 이러한 변경 내용은 종종 명령이 현재 명령 대상에서 실행되어야 하는지 여부에 영향을 미칩니다.
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.