В MVVM DataTemplates считаются представлениями, в то время как UserControls являются представлениями?

StackOverflow https://stackoverflow.com/questions/1016828

Вопрос

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

Но в Табличка с данными также может отображать данные ViewModel.

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

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

Это было полезно?

Решение

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

<DataTemplate DataType="{x:Type vm:FooViewModel}">
    <v:FooView />
</DataTemplate>

Другие советы

На данный момент при переходе на MVVM для меня имеет смысл:

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top