Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

RoutedCommand.CanExecuteChanged Event

Definition

Namespace:
System.Windows.Input
Assembly:
PresentationCore.dll

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Occurs when changes to the command source are detected by the command manager. These changes often affect whether the command should execute on the current command target.

public:
 virtual event EventHandler ^ CanExecuteChanged;
public event EventHandler CanExecuteChanged;
member this.CanExecuteChanged : EventHandler 
Public Custom Event CanExecuteChanged As EventHandler 

Event Type

Implements

Examples

The following example is a CanExecuteChanged event handler from a custom implementation of ICommandSource.

this.Command in this example is the Command property on the ICommandSource. If the command is not null, the command is cast to a RoutedCommand. If the command is a RoutedCommand, then the CanExecute method is called passing the CommandTarget and the CommandParameter. If command is not a RoutedCommand, it is cast to an ICommand and the CanExecute method is called passing the CommandParameter.

If the CanExecute method returns true, then the control is enabled; otherwise, the control is disabled.

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

Remarks

The RoutedCommand listens for the RequerySuggested event, which is raised by the CommandManager. The RequerySuggested event is raised whenever conditions are met that may change the whether the command should execute, such as a change in keyboard focus. When the command receives the RequerySuggested event, it raises the CanExecuteChanged event. Generally, the command source will listen for this event and query the RoutedCommand by way of the CanExecute method. Most command sources will disable themselves if the command cannot be executed, as part of their command binding. An example of this is when a MenuItem grays itself out when the command cannot be executed.

In some situations, the CommandManager is unaware of a change in conditions that alters the ability of a command to execute. In these cases, you can force the CommandManager to raises the RequerySuggested event by calling the InvalidateRequerySuggested method, this will in turn cause the RoutedCommand to raise the CanExecuteChanged event.

Applies to


Feedback

Was this page helpful?