Есть два разных подхода, а не один "правильный путь".
Подход, которому помогает ViewModelLocator
или аналогичный, - это подход View-First для разработки MVVM. Это означает, что вы начинаете с вашего View в конструкторе, а затем строите ViewModel для соответствия. По логике, представления часто создают другие представления, а ViewModel обычно загружается с помощью определенной формы локатора и заполняется для данного представления. Сообщения или службы используются для подключения соответствующих моделей к вновь созданным моделям представления.
Преимущество этого заключается в том, что дизайн немного проще, особенно при работе с Blend.
Другой подход заключается в работе «ViewModel-First». Таким образом, вы генерируете свои ViewModels, а затем используете DataTemplates для заполнения View. ViewModels будет создавать / создавать другие виртуальные машины, непосредственно устанавливая соответствующую модель. Это обычно (IMO) намного, намного чище с точки зрения программиста, так как все работает напрямую. Тем не менее, как правило, с точки зрения дизайнера проектировать и работать с ним труднее, так как данные времени разработки сложнее генерировать и т. Д.
Оба подхода совершенно верны и имеют сильные преимущества и недостатки. Различные пуристы MVVM предпочитают один подход другому по разным причинам - как правило, подходят ли они к этому с точки зрения чистоты кода или с точки зрения дизайнера.