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. If command is not a RoutedCommand, it is cast to an ICommand and the CanExecute method is called passing the 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 합니다.