WPF Two command handlers, one command

Im based on third party control. It implements ApplicationCommands.SelectAll. However, the behavior I want is a little different. there is no virtual method that I can override, and when I register a class handler, for example,

     CommandManager.RegisterClassCommandBinding(typeof(MyDerivedControl), new CommandBinding(ApplicationCommands.SelectAll, new ExecutedRoutedEventHandler(OnExecutedSelectAll), new CanExecuteRoutedEventHandler(OnCanExecuteSelectAll)));

My methods are not called. The third control that I get means

e.Handled=true;

in my command handlers (I know this reason, I saw the source, but I can’t change it)

What can I do?

+4
source share
1 answer

You have three options:

1) CommandBinding :

CommandBinding cb = new CommandBinding(ApplicationCommands.SelectAll);
cb.PreviewCanExecute += OnCanExecuteSelectAll;
cb.PreviewExecuted += OnExecutedSelectAll;

- CommandBinding, PreviewExecuted, Executed , e.Handled false. , , PreviewCanExecute/CanExecute. CommandBinding.
PreviewExecuted , .

2) CommandManager:

CommandManager.AddPreviewCanExecuteHandler(this, OnCanExecuteSelectAll);
CommandManager.AddPreviewExecutedHandler(this, OnExecutedSelectAll);

, . , ( ). : CommandBinding, CommandManager - .

3) ( ):

this.AddHandler(CommandManager.CanExecuteEvent, new CanExecuteRoutedEventHandler(OnCanExecuteSelectAll), true);
this.AddHandler(CommandManager.ExecutedEvent, new ExecutedRoutedEventHandler(OnExecutedSelectAll), true);

, , .
, , CommandManager .
, 2 , CommandManager.Add [ ] Handler - AddHandler .

+6

All Articles