2009-08-05 5 views
3

Извините, если это уже было задано, но я просто хочу убедиться, что я делаю это правильно.Сетки с ViewModels - WPF

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

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

Так, например, я не очень-то вроде этого:

{Binding DomainObject.Property} 

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

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

EDIT: Для дополнительной информации объектами domian являются объекты LINQ-To-SQL, поэтому я не думаю, что они реализуют INotifyPropertyChanged, но я не уверен.

ответ

3

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

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

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

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

+0

Форматирование и валидация были чем-то, о чем я думал, что может вызвать проблемы. –

+0

Программа, которую я пишу, достаточно мала, поэтому я не думаю, что поеду с ICustomTypeDescriptor, но хорошо знаю. –

+0

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

1

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

0

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

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

Смежные вопросы