TL version; DR is that CanExecute methods are called when certain input events occur in a window. There are primarily keyboard and mouse events.
Therefore, at any time, someone presses or presses a key, ALL commands become invalid CommandManager (by raising CommandManager.RequerySuggested ). This is why it is important to quickly save CanExecute methods.
You can also handle this by creating your own implementation of ICommand , which does not use the CommandManager for the CanExecuteChanged event.
source share