В MVVM DataTemplates считаются представлениями, в то время как UserControls являются представлениями?
-
06-07-2019 - |
Вопрос
В 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.В настоящее время у меня возникают проблемы с производительностью при использовании этого подхода, поскольку представление обновляется каждый раз, когда представление получает фокус.Как вы можете видеть здесь и здесь
К сожалению, лучшего варианта я пока не нашел.