ViewModel / Просмотр отношений и проверка - PullRequest
5 голосов
/ 07 апреля 2009

В нашем приложении WPF мы хотим использовать базовый шаблон MVVM. Мы обсуждали это, и возникли некоторые неопределенности относительно отношения ViewModel / View и проверки. Вы бы сказали, что это хорошее понимание?

  • Каждый просмотр имеет одну и только одну ViewModel и цель ViewModel является предоставить свой вид с данными и обрабатывать все события своего просмотра и команды. (Существуют ли случаи, когда одна ViewModel обслуживает два представления, например, стандартное представление формы ввода XAML и импорт CSV, который предоставляет те же данные, что и форма, и, следовательно, должен иметь одинаковую проверку?)

  • Проверка выполняется исключительно ViewModel , когда, например, вид генерирует событие ChangedFocus или SaveButtonPressed и т. д.

  • Модель довольно глупа , просто структура данных на основе одного или больше таблиц из базы данных, но сама модель не справляется проверка, например. Это даже ViewModel, который создает и хранит ObservableCollection объектов, например. «Клиенты», а не сама модель.

Любые отзывы приветствуются.

Ответы [ 3 ]

5 голосов
/ 07 апреля 2009

Каждый просмотр имеет одну и только одну ViewModel

Я думаю, что если вы строго придерживаетесь шаблона, то в каждом представлении будет только одна ViewModel. В нашем приложении есть случай, когда требования изменились в середине потока, и было проще всего иметь ссылку View на две разные модели ViewModel. В зависимости от того, как вы реализуете шаблон, это может быть или не быть возможным.

Существуют ли случаи, когда одна ViewModel обслуживает два представления

Да, это одно из преимуществ шаблона.

Проверка выполняется исключительно ViewModel

Не обязательно. Мы решили, что наши классы модели реализуют IDataErrorInfo и сами выполняют проверку. Это гарантирует, что независимо от того, где используется класс Model, проверка будет одинаковой. Если валидация когда-либо нуждается в изменении, она находится только в одном месте.

Модель довольно тупая

Это настолько глупо, насколько вы хотите. Вы можете включить в модель валидацию и бизнес-правила, если хотите.

3 голосов
/ 08 апреля 2009

Я согласен со всем сказанным выше. Только один комментарий: ваша модель представления может использовать другие модели представления внутри. Используя этот подход, вы можете разделить свое представление на несколько регионов, которые обслуживаются различными моделями представления. Просто используйте ContentPresenter, свяжите его с необходимым свойством модели представления (которое получает необходимую модель представления) и используйте DataTemplate, чтобы связать необходимое представление с моделью представления.

1 голос
/ 07 апреля 2009

Существуют ли случаи, когда одна ViewModel обслуживает два представления

Скины приложений могут использовать эту способность.

Модель довольно тупая но сама модель не поддерживает проверку

Модель может быть настолько умной, насколько вам нравится. И оно может включать «проверку» для обеспечения целостности, но эта проверка не будет включать в себя сообщения, отображаемые в пользовательском интерфейсе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...