Сетки с ViewModels - WPF - PullRequest
       16

Сетки с ViewModels - WPF

3 голосов
/ 05 августа 2009

Извините, если об этом уже спрашивали, но я просто хочу убедиться, что я делаю это правильно.

Если у меня есть домианский объект, у которого есть, скажем, 10 свойств. В основной форме у меня есть сетка, в которой я хочу показать почти все свойства модели.

Я создал модель представления, чтобы обернуть объект домена, чтобы отобразить его в виде сетки, но затем мне нужно снова открыть все свойства. Я просто чувствую привязанность прямо к модели через модель представления, чувствует себя грязным и немного портит цель.

Так, например, мне не очень нравится:

 {Binding DomainObject.Property}

где DomainObject является свойством в моей модели представления.

Таким образом, мой главный вопрос заключается в том, должен ли я раскрывать все свойства модели через модель представления, чтобы связать ее с сеткой?

РЕДАКТИРОВАТЬ: Просто для дополнительной информации объекты Domian являются объектами LINQ-To-SQL, поэтому я не думаю, что они реализуют INotifyPropertyChanged, но я не уверен.

Ответы [ 3 ]

3 голосов
/ 05 августа 2009

Некоторые люди скажут, что это не имеет значения, другие скажут, что это имеет значение. Я нахожусь в последнем лагере по следующим причинам:

  • Вы увеличиваете зависимости представления, поскольку теперь это зависит от модели данных, а не только от модели представления.
  • Требуется, чтобы разработчики знали свойства и структуру вашей модели данных.
  • Вы создаете больше работы для (почти неизбежного) рефакторинга, когда решаете, что вам нужен слой косвенности для форматирования, проверки или чего бы то ни было.
  • Как указал Томас, в моделях данных часто не реализовано уведомление об изменении

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

PS. Если вы часто сталкиваетесь с этой ситуацией, вы можете рассмотреть реализацию ICustomTypeDescriptor, которая переносит любой объект данных и предоставляет его свойства с уведомлением об изменениях. Таким образом, ваша виртуальная машина может расширять эту универсальную оболочку, пока вы не решите, что вам нужно извлекать свойства для таких целей, как форматирование и проверка.

1 голос
/ 05 августа 2009

Если вам нужно уведомление об изменении свойств и модель не реализует INotifyPropertyChanged, то вам нужно создать новые свойства в ViewModel. В противном случае связывание напрямую с моделью, вероятно, не является большой проблемой: шаблон MVVM - это просто руководство, при необходимости можно немного изменить правила ...

0 голосов
/ 05 августа 2009

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

Однако это работает только при условии, что в вашей модели реализованы уведомления об изменениях, поэтому работает привязка данных.

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