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 听 RequerySuggested 由 引发的事件 CommandManager。 RequerySuggested每当满足可能更改命令是否应执行的条件(例如更改键盘焦点)时,都会引发 事件。 当命令收到 事件时 RequerySuggested ,它会引发 CanExecuteChanged 事件。 通常,命令源将侦听此事件,并通过 CanExecute 方法查询 RoutedCommand 。 如果命令无法执行,则大多数命令源将自行禁用,作为其命令绑定的一部分。 例如,当无法执行命令时 MenuItem ,当自身灰显时。
在某些情况下, CommandManager 不知道条件的更改会改变命令的执行能力。 在这些情况下,可以通过调用 InvalidateRequerySuggested 方法强制 CommandManagerRequerySuggested 引发事件,这反过来又会导致 RoutedCommand 引发CanExecuteChanged事件。