La seule chose que j'ajouterais à la réponse de Rich McGuire est que les RoutedCommands (et leur descendant plus répandu RoutedUICommand doivent être câblés avec des gestionnaires d'événements pour fonctionner correctement.
La plupart des implémentations MVVM que j'ai rencontrées tentent de tirer parti de la liaison avec le ViewModel et donc le ViewModel (et non la vue) possède la logique CanExecute/Execute.
En revanche, les gestionnaires d'événements déplacent cette charge vers la vue. Le traitement peut ensuite être propagé au ViewModel, mais cela implique un degré de couplage légèrement plus élevé entre ViewModel et View (casting + appel de méthode, etc.).