Подтвердить что ты не робот

WPF - MVVM. Каковы преимущества и недостатки различных методов создания представлений?

Я использую MVVM в течение последних двух лет, и с тех пор он, безусловно, эволюционировал к лучшему. Поскольку я читал, хотя сотни статей MVVM и вопросов stackoverflow, я заметил, что, как представляется, все больше и больше статей, описывающих отношения view/viewmodel и создание как ViewModel сначала или View first. Эти статьи обычно используют IoC или DI. Я бы включил некоторые ссылки, но в качестве нового пользователя SO я ограничен только 1.

Моим любимым методом было использование datatemplates для создания представлений и структурирование приложения за пределами viewmodels, а не из представлений. Я редко вижу статьи, которые используют этот шаблон.

<DataTemplate DataType="{x:Type ViewModels:DummyViewModel}">
  <Views:DummyUserControl DataContext="{Binding}"/>
</DataTemplate>

Тесты и развязки, по-видимому, являются основным направлением этих проектов и статей по созданию/отношениям V-VM, не связанных с данными, и часто они связаны с MEF или PRISM. В конечном итоге я хотел бы знать следующее:

  • Используется или рекомендуется использовать метод создания представления DataTemplate?
  • Каковы преимущества/недостатки первого дизайна представления?
  • Каковы преимущества/недостатки первой модели viewmodel (с введенным представлением).

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

Любые хорошие ссылки на статьи, посвященные этим темам, приветствуются, если они не связаны с MEF/PRISM. Чем больше, тем лучше. (Google появляется довольно много)

4b9b3361

Ответ 1

1. Используется ли или используется метод создания представления DataTemplate?

Это мой предпочтительный метод работы в MVVM. Мне очень нравится этот подход, по причинам, которые я укажу ниже. Я использую это во всем своем развитии.

2. Каковы преимущества/недостатки первого дизайна представления?

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

Основной контур здесь, с моей точки зрения, заключается в том, что вы добавляете более плотную связь между View и ViewModel. Также сложнее выбрать конкретную модель для прохождения.

3. Каковы преимущества/недостатки первой модели viewmodel (с введенным представлением)

Мне лично нравится такой подход. Таким образом, "логическая" сторона приложения полностью содержится в вашем уровне ViewModel. Используя ContentPresenters, вы можете заставить ViewModel легко создавать другие ViewModels, определяя "поток" вашего приложения. Представления могут быть легко изменены дизайнером.

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

Ответ 2

Мы видели, что подход DataTemplate имеет некоторые ограничения. Например, шаблон создается как общий (singleton) экземпляр. В некоторых сценариях это имеет нежелательные побочные эффекты. Именно по этой причине мы используем первый проект ViewModel (с введенным представлением).

Используемый нами подход описан на странице проекта WPF Application Framework (WAF):

http://waf.codeplex.com/wikipage?title=Model-View-ViewModel%20Pattern&ProjectName=waf