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