c# - How to requery 'CanExecute' of a single RoutedCommand? -


i need refresh canexecute state of 1 or more (though far not all) routedcommand objects.

i know you can update commands using

commandmanager.invalidaterequerysuggested(); 

since updates far more commands necessary, calling function performance problem in application.

my initial hope calling canexecute() manually raise event if state changed, not case.

when looking @ reference source then, canexecutechanged not seem accessible derived classes provide kind of extension routedcommand class allows raising event manually.

public event eventhandler canexecutechanged {     add { commandmanager.requerysuggested += value; }     remove { commandmanager.requerysuggested -= value; } } 

any ideas how implement such mechanism? know delegatecommand, need routed command, don't think class can me.

you can create own custom routedcommand, reimplement icommand , register additional event yourself. note using new supposedly safe here because wpf use icommand reference call canexecutechanged.

public class myroutedcommand : routedcommand, icommand {     private event eventhandler _canexecutechanged;      public void raisecanexecutechanged()     {         var handler = _canexecutechanged;         if (handler != null) handler(this, eventargs.empty);     }      public new event eventhandler canexecutechanged     {         add         {             _canexecutechanged += value;             base.canexecutechanged += value;         }         remove         {             _canexecutechanged -= value;             base.canexecutechanged -= value;         }     } } 

you should aware while wpf use weakeventmanager register event, others devs might not. since routed commands defined static fields, potential memory leak. implement weak event manager prevent this.


Comments

Popular posts from this blog

How to access named pipes using JavaScript in Firefox add-on? -

multithreading - OPAL (Open Phone Abstraction Library) Transport not terminated when reattaching thread? -

node.js - req param returns an empty array -