Чтобы использовать Mvvm framework, просто выполните следующие шаги:
- У вас есть модель и модель представления с тем же именем.
View-модели не должны быть обертками вокруг моделей. Задача модели представления состоит в том, чтобы обрабатывать запросы на внешние сервисы, такие как загрузка и сохранение данных. Сами данные, а также валидация и большая часть бизнес-логики должны быть в моделях.
Я не могу подчеркнуть это достаточно. Всякий раз, когда вы создаете модель представления, которая оборачивает модель путем делегирования, вы вносите огромную дыру в свой API. В частности, все, что имеет прямую ссылку на модель, может изменить свойство таким образом, что модель представления и, следовательно, пользовательский интерфейс никогда не уведомляются. Аналогично, любые изменения в вычисляемых полях в модели не будут распространяться обратно на модель представления.
- У вас есть вид и модель вида с одинаковым именем.
В идеале модели представления не зависят от используемых ими экранов. Это особенно верно в приложении WPF, где несколько окон могут совместно использовать один и тот же экземпляр модели представления.
Для небольших приложений, таких как, вам может понадобиться только одна модель представления для всего приложения. Для более крупных приложений вам может понадобиться один для основных функций и один для каждого вторичного аспекта, такого как управление конфигурацией.
- У вас нет кода.
В абсолютном выражении код позади не является ни хорошим, ни плохим. Это просто место для размещения логики, специфичной для отдельного представления или элемента управления. Поэтому, когда я вижу представление без кода, я сразу же проверяю следующие ошибки:
- Касается ли модель вида определенных элементов управления по имени?
- Предоставляется ли модели представления доступ к элементам управления через параметр команды?
- Используется ли EventToCommand или другое поведение с утечками вместо простого обработчика событий?
EventToCommand от MVVM Light особенно плох, потому что он предотвратит сбор мусора элементов управления после их удаления с экрана.
- View-модели прослушивают уведомления об изменениях свойств
Если модель имеет более длительный срок службы, чем модель представления, которая прослушивает ее события, то, возможно, у вас утечка памяти. В отличие от представлений, которые имеют незагруженное событие, модели представлений не имеют хорошей истории для управления жизненным циклом. Поэтому, если они прикрепят событие к модели, которая может превзойти их, тогда модель представления будет просочиться.