Как только вы ссылаетесь на PresentationCore в своей ViewModel (что в настоящее время неизбежно, если вы хотите использовать ICommand), вы пропускаете всевозможные нежелательные связанные с View функции в свой ViewModel. Например, MessageBox.Show, когда вы видите, что это называется в модульном тесте, он приводит домой, почему это плохо.
Чтобы ответить на вопрос, сохраните View и ViewModel в отдельных проектах. Я подумал об этом сам, но после того, как я спустился по отдельному проекту, мне потребовалось некоторое время, чтобы оценить, но было очень полезно заставить меня придерживаться чистого решения MVVM, и уроки от этого значительно улучшили мою общую архитектуру решения. Все дело в сокращении зависимостей от ненужных сборок с использованием интерфейсов и при необходимости шаблона адаптера. Одним из примеров является то, что мой проект View, являющийся точкой входа, имеет ссылку на Ninject, но я не хочу, чтобы мой ViewModel имел эту ссылку. В противном случае кто-то может прийти и использовать статическое ядро Ninject напрямую.
Что касается ICommand, я не знаю, что история использовала только WPF с 4, но похоже, что MVVM была запоздалой мыслью. Я не уверен, почему еще Microsoft поместила бы этот интерфейс в PresentationCore. Я надеюсь, что это будет рассмотрено в следующем выпуске с отдельной сборкой для уровня ViewModel.
Это просто сводится к дисциплине. Что мешает недисциплинированному разработчику добавить ссылку на PresentationFramework из вашей сборки VM? Дисциплина требуется независимо от того, отделили ли вы свои виртуальные машины от другой сборки или нет. –