Calls to CommandManager.InvalidateRequerySuggested() take far longer to take effect than I would like (1-2 second delay
is there a way I can make CommandManager.InvalidateRequerySuggested() do it's job faster?
Yes, there is way to make it work faster!
Command to keep / cache CanExecuteState in a boolean variable.RaiseCanExecuteChanged method to recalculate CanExecuteState and if it really changed to raise CanExecuteChanged event.CanExecute method to simply return CanExecuteState.InvalidateRequerySuggested method is invoked Command subscribers will only read CanExecuteState variable by invoking CanExecute method and check if it changed or not. That's almost zero overhead. All Commands will be disabled / enabled almost the same time.RaiseCanExecuteChanged method that will be called only once for a Command and only for a limited set of Commands.