DataTemplate Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Описывает визуальную структуру объекта данных. Используйте привязку данных для определенных элементов шаблона, отображающих значения данных.
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DataTemplate : FrameworkTemplate, IElementFactory
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class DataTemplate : FrameworkTemplate, IElementFactory
Public Class DataTemplate
Inherits FrameworkTemplate
Implements IElementFactory
- Наследование
- Атрибуты
- Реализации
Примеры
В следующем примере элемент DataTemplate используется для отображения элементов ListView. В этом примере ListView привязан к коллекции Customer
объектов . DataTemplate содержит элементы управления TextBlock , которые привязываются к свойствам FirstName
, LastName
и Address
. Дополнительные сведения о привязке данных см. в разделе Привязка данных.
<Grid>
<Grid.Resources>
<local:Customers x:Key="customers"/>
</Grid.Resources>
<ListView ItemsSource="{StaticResource customers}"
Width="350" Margin="0,4,0,8">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:Customer">
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{x:Bind LastName}"/>
<TextBlock Text="," Margin="0,0,2,0"/>
<TextBlock Text="{x:Bind FirstName}"/>
</StackPanel>
<TextBlock Text="{x:Bind Address}" Margin="8,0,0,2"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
public class Customer
{
public String FirstName { get; set; }
public String LastName { get; set; }
public String Address { get; set; }
public Customer(String firstName, String lastName, String address)
{
this.FirstName = firstName;
this.LastName = lastName;
this.Address = address;
}
}
public class Customers : ObservableCollection<Customer>
{
public Customers()
{
Add(new Customer("Michael", "Anderberg",
"12 North Third Street, Apartment 45"));
Add(new Customer("Chris", "Ashton",
"34 West Fifth Street, Apartment 67"));
Add(new Customer("Seo-yun", "Jun",
"56 East Seventh Street, Apartment 89"));
Add(new Customer("Guido", "Pica",
"78 South Ninth Street, Apartment 10"));
}
}
Комментарии
Объект DataTemplate
используется в качестве значения для следующих свойств:
- ItemsControl.ItemTemplate (наследуется различными элементами управления, такими как ListView, GridView, ListBox)
- ContentControl.ContentTemplate (наследуется различными элементами управления содержимым, такими как Кнопка, Кадр, ПараметрыFlyout)
-
HeaderTemplate
свойства различных классов элементов управления иFooterTemplate
- ItemsPresenter.HeaderTemplate и ItemsPresenter.FooterTemplate
-
HeaderTemplate
свойства иFooterTemplate
элементов управления текстом, таких как RichEditBox, TextBox -
HeaderTemplate
свойство таких элементов управления, как ComboBox, DatePicker, HubSection, Pivot, Slider, TimePicker, ToggleSwitch; некоторые из них также имеютFooterTemplate
Для указания визуального представления данных обычно используется DataTemplate. Объекты DataTemplate особенно полезны при привязке ItemsControl , например ListBox , ко всей коллекции. Без конкретных инструкций элемент ListBox отображает строковое представление объектов в коллекции. Используйте DataTemplate для определения внешнего вида каждого объекта данных. Содержимое DataTemplate становится визуальной структурой объектов данных.
Привязка данных обычно используется в DataTemplate. Например, предположим, что ListView привязан к коллекции Customer
объектов и свойство ItemTemplate имеет значение DataTemplate. При создании ListView создается элемент ListViewItem для каждого Customer
элемента в коллекции, а dataContextэлемента ListViewItem устанавливается для соответствующего клиента. Другими словами, DataContext первого ListViewItem задается для первого клиента, dataContext второго ListViewItem — для второго клиента и т. д. Вы можете привязать элементы в DataTemplate для отображения значений свойств, поступающих от каждого из Customer
объектов .
DataTemplate также можно использовать для совместного использования объектов UIElement в нескольких объектах ContentControl . Например, предположим, что вам нужно, чтобы в приложении было несколько кнопок, чтобы иметь один и тот же рисунок. Вы можете создать объект DataTemplate, содержащий рисунок, и использовать его в качестве ContentTemplate для кнопок. Шаблон данных для ContentTemplate также может использовать привязку данных. Но в этом случае контекст данных совпадает с элементом, к которому применяется шаблон. Обычно это один объект данных, и понятия элементов не существует.
DataTemplate можно поместить в качестве непосредственного дочернего элемента элемента свойства ItemTemplate в XAML. Это называется встроенным шаблоном , и вы бы сделали это, если бы вам не нужно было использовать этот шаблон данных для других областей пользовательского интерфейса. Можно также определить DataTemplate как ресурс, а затем ссылаться на ресурс как значение свойства ItemTemplate . После того как это ресурс, вы можете использовать один и тот же шаблон для нескольких элементов пользовательского интерфейса, которым требуется шаблон данных. Если вы различите шаблон данных в Application.Resources, вы даже сможете совместно использовать один и тот же шаблон для разных страниц пользовательского интерфейса.
Использование XAML для содержимого шаблона данных не предоставляется в качестве настраиваемого свойства кода. Это специальное поведение, встроенное в обработку XAML для DataTemplate.
Для расширенных сценариев привязки данных может потребоваться, чтобы свойства данных определяли, какой шаблон должен создавать представления пользовательского интерфейса. В этом сценарии можно использовать DataTemplateSelector и задать такие свойства, как ItemTemplateSelector , чтобы назначить его представлению данных. DataTemplateSelector — это класс логики, который вы пишете самостоятельно, который имеет метод, который возвращает ровно один объект DataTemplate в подсистему привязки на основе вашей собственной логики, взаимодействующей с данными. Дополнительные сведения см. в статье Подробно о привязке данных.
Присоединенные свойства XAML
DataTemplate — это класс службы узла для присоединенного свойства XAML.
Для поддержки доступа обработчика XAML к присоединенным свойствам, а также для предоставления коду эквивалентных операций получения и задания , каждое присоединенное свойство XAML имеет пару методов доступа Get и Set. Другой способ получить или задать значение в коде — использовать систему свойств зависимостей, вызывая метод GetValue или SetValue и передавая поле идентификатора в качестве идентификатора свойства зависимостей.
Присоединенное свойство | Описание |
---|---|
ExtensionInstance | Возвращает или задает экземпляр расширения, определяющий вспомогательные методы для поэтапной отрисовки шаблона данных.
|
Конструкторы
DataTemplate() |
Инициализирует новый экземпляр класса DataTemplate . |
Свойства
Dispatcher |
Всегда возвращает в |
DispatcherQueue |
Возвращает объект , |
ExtensionInstanceProperty |
Определяет присоединенное свойство ExtensionInstance XAML. |
Присоединенные свойства
ExtensionInstance |
Возвращает или задает экземпляр расширения, определяющий вспомогательные методы для поэтапной отрисовки шаблона данных. |
Методы
ClearValue(DependencyProperty) |
Очищает локальное значение свойства зависимостей. (Унаследовано от DependencyObject) |
GetAnimationBaseValue(DependencyProperty) |
Возвращает любое базовое значение, установленное для свойства зависимостей, которое применяется в случаях, когда анимация не активна. (Унаследовано от DependencyObject) |
GetElement(ElementFactoryGetArgs) |
Создает или извлекает существующий экземпляр объекта UIElement , объявленного в DataTemplate. |
GetExtensionInstance(FrameworkElement) |
Возвращает значение присоединенного свойства XAML DataTemplate.ExtensionInstance для целевого элемента. |
GetValue(DependencyProperty) |
Возвращает текущее действующее значение свойства зависимостей из DependencyObject. (Унаследовано от DependencyObject) |
LoadContent() |
Создает объекты UIElement в DataTemplate. |
ReadLocalValue(DependencyProperty) |
Возвращает локальное значение свойства зависимостей, если задано локальное значение. (Унаследовано от DependencyObject) |
RecycleElement(ElementFactoryRecycleArgs) |
Перезапускает элемент UIElement , полученный ранее с помощью GetElement. |
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Регистрирует функцию уведомления для прослушивания изменений определенного DependencyProperty в этом экземпляре DependencyObject . (Унаследовано от DependencyObject) |
SetExtensionInstance(FrameworkElement, IDataTemplateExtension) |
Задает значение присоединенного свойства XAML DataTemplate.ExtensionInstance для целевого элемента. |
SetValue(DependencyProperty, Object) |
Задает локальное значение свойства зависимостей для Объекта DependencyObject. (Унаследовано от DependencyObject) |
UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
Отменяет уведомление об изменениях, которое было ранее зарегистрировано путем вызова Метода RegisterPropertyChangedCallback. (Унаследовано от DependencyObject) |