В слишком упрощенном ответе ваша ViewModel должна содержать ЛОГИКУ для управления тем, что отображает ваш View, а также тем, как ему разрешено взаимодействовать с моделью или данными.
Такие события, как получение данных, сохранение и удаление, перехватываются с помощью командного механизма и передаются в ViewModel, где они могут быть протестированы. Обработка «грязных» событий также является обязанностью ViewModel. Что касается того, кто вызывает ViewModel, вы доверяете вызов механизмам привязки, доступным в WPF и Silverlight.
В ViewModel все еще остается использование передового опыта и обеспечение наличия уровня DataAccess, абстрагирующего ваш источник данных, и, возможно, использование шаблона Repository для его абстрагирования.
Жизненный цикл ViewModel может быть простым, как показано ниже ...
- Конструктор вызывается представлением
- Метод GetData, вызываемый ViewModel Ctor
- Данные получены и переданы в существующее свойство ObservableCollection с привязкой к данным
Однако, поскольку у вас, вероятно, будет много движущихся частей в Ctor виртуальной машины, включая интерфейс хранилища данных, вам, вероятно, захочется работать с IoC. Это сделает жизненный цикл модели представления ближе к ...
- View / ViewModel (Зависит, если вы сначала View или ViewModel) извлекается из IoC
- IoC Обрабатывает сопряжение View-ViewModel (на основе конвенции)
- Хранилище данных внедряется в ViewModel
- Метод GetData, вызываемый ViewModel Ctor
- Данные получены и переданы в существующее свойство ObservableCollection с привязкой к данным
Это может показаться большим количеством шагов, однако с контейнером IoC вы на самом деле просто вызываете один метод, такой как IoC.Get (), а остальные шаги выполняются автоматически в зависимости от применяемых соглашений.