Ну, я думаю, что нет решения .
CommandBindings не так легко тестируются и представляют зависимость от классов WPF в ViewModel, что не очень хорошо.
Поэтому я бы не стал их использовать.
И DelegateCommand, и CommandSinkCommand (решение Джоша Смита) являются хорошими способами IMO. Они на самом деле не отличаются, и ни один из них не превосходит другого.
Хотя я заметил, что версия CommandSink не всегда работает, когда маршрутизация команд усложняется (особенно когда используются шаблоны данных).
Вы даже можете объединить их: используйте DelegateCommand и дополнительно используйте версию JoshSmith - так что вы можете объединить преимущества обоих.
Единственное, что вам нужно, это несколько вспомогательных классов, которые не так сложно реализовать.
Гораздо важнее согласованность в вашем приложении: если вы решили, что вы хотите использовать, вы должны следовать этому примеру во всем приложении.