WPF - How to force a Command to re-evaluate 'CanExecute' via its CommandBindings

.net, command, commandbinding, wpf

Solution

Not the prettiest in the book, but you can use the CommandManager to invalidate all commandbinding:

CommandManager.InvalidateRequerySuggested();

See more info on MSDN

Problem

I have a `Menu` where each `MenuItem` in the hierarchy has its `Command` property set to a `RoutedCommand` I've defined. The associated `CommandBinding` provides a callback for the evaluation of `CanExecute` which controls the enabled state of each `MenuItem`. This almost works. The menu items initially come up with the correct enabled and disabled states. However when the data that my `CanExecute` callback uses changes, I need the command to re-request a result from my callback in order for this new state to be reflected in the UI. There do not appear to be any public methods on `RoutedCommand` or `CommandBinding` for this. Note that the callback is used again when I click or type into the control (I guess it's triggered on input because mouse-over doesn't cause the refresh).

Original source

Related problems