В MVVM DataTemplates считаются представлениями, поскольку пользовательские элементы управления являются представлениями? - PullRequest
7 голосов
/ 19 июня 2009

В MVVM каждый View имеет ViewModel. Представление, которое я понимаю как окно , страница или UserControl , к которому вы можете прикрепить модель представления, из которой представление получает свои данные.

Но DataTemplate также может отображать данные ViewModel.

Итак, я понимаю, что DataTemplate - это еще одно «представление», но, похоже, существуют различия , например. Windows, Pages и UserControls могут определять свои собственные .dll, один из которых связан с DataContect, другой - посредством присоединения шаблона, так что Windows, Pages, UserControls можно динамически подключать к ViewModels с помощью ServiceLocator / Container и т. д.

Как иначе DataTemplates отличаются от Windows / Pages / UserControls, когда дело доходит до визуализации данных ViewModel в пользовательском интерфейсе? И есть ли другие типы «видов», кроме этих четырех?

Ответы [ 3 ]

7 голосов
/ 19 июня 2009

То, как я его использую, на самом деле DataTemplate - это способ связи View с ViewModel. Обычно мои DataTemplates в MVVM выглядят так:

<DataTemplate DataType="{x:Type vm:FooViewModel}">
    <v:FooView />
</DataTemplate>
1 голос
/ 12 августа 2012

Что имеет для меня наибольшее значение при переходе на MVVM, так это:

UserControls: группируйте представления и элементы управления вместе, которые предназначены для выполнения всего процесса для пользователя. Я использую usercontrol для выдвижного выдвижного ящика, который позволяет пользователю пролистывать различные классификации деталей (где каждая основная категория деталей направляет пользователя через собственный процесс выбора / мастер). Также посмотрите на Charting Controls.

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

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

Вот как я понимаю, но границы очень размытые. Мне нравится книга Апресса Pro Expression Blend 4 Эндрю Троелсона. Впрочем, он не приводит примеров, требующих большого объема данных.

0 голосов
/ 18 мая 2010

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

К сожалению, лучшего варианта пока не нашел.

...