Как и всегда в MVVM, нет правильного способа ... как в отношении feedom ... :-)
Вы можете поместить код в модель представления, если хотите,Однако затем вам также необходимо будет сгенерировать данные времени проектирования в модели представления - если вы хотите их использовать.
Большим недостатком этого подхода является то, что вы вводите связь между моделью представления и кодом сервиса (так как вам придется создавать экземпляр службы в модели представления).Общий подход к разделению компонентов заключается в создании интерфейса, описывающего ваш сервис, и вставке экземпляра объекта, реализующего этот интерфейс, в модель представления в его конструкторе.Это позволяет вам создавать время разработки и реализацию времени выполнения, и вашей модели представления не важно, какая из них используется - то есть объекты не связаны между собой.
Редактировать
Внедрение в моем посте не означает, , означает ли это, что вы используете контейнер / инфраструктуру для инъекций, это только означает, что вы используете интерфейс для абстрагирования своего поведения службы, а затем передаете разработчик или этот интерфейс в конструктор вашегопосмотреть модель.Теперь вы можете передавать различные реализации интерфейса при создании модели представления, например, в локаторе представления.
Предложенный шаблон называется «инверсией управления», а внедрение - это метод передачи объектов, созданных в других местах, в создаваемый вами класс.Благодаря этому ваш класс теперь защищен от каких-либо подробных знаний о разработчиках, и они становятся взаимозаменяемыми.
Инверсия контейнеров управления - таких как ninject, unity и т. Д. - просто поможет вам автоматически разрешать зависимости, однако, они не требуются для использования встроенной версии шаблона управления.