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
- Наследование
- Атрибуты
- Реализации
Примеры
В следующем примере для отображения элементов ListView используется DataTemplate. В этом примере ListView привязан к коллекции Customer объектов. DataTemplate содержит элементы управления TextBlock, которые привязываются к FirstNameсвойствам и Address свойствамLastName. Дополнительные сведения о привязке данных см. в подробной статье о привязке данных.
<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 (который наследуется различными элементами управления содержимым, такими как Button, Frame, SettingsFlyout)
-
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 для каждой Customer из коллекций создается объект ListViewItem, а 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) |
Возвращает значение присоединенного свойства DataTemplate.ExtensionInstance XAML для целевого элемента. |
| GetValue(DependencyProperty) |
Возвращает текущее эффективное значение свойства зависимостей из DependencyObject. (Унаследовано от DependencyObject) |
| LoadContent() |
Создает объекты UIElement в DataTemplate. |
| ReadLocalValue(DependencyProperty) |
Возвращает локальное значение свойства зависимостей, если задано локальное значение. (Унаследовано от DependencyObject) |
| RecycleElement(ElementFactoryRecycleArgs) |
Перезапуск пользовательского интерфейса , который ранее был получен с помощью GetElement. |
| RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Регистрирует функцию уведомлений для прослушивания изменений в определенном экземпляре DependencyProperty в этом экземпляре DependencyObject . (Унаследовано от DependencyObject) |
| SetExtensionInstance(FrameworkElement, IDataTemplateExtension) |
Задает значение присоединенного свойства DataTemplate.ExtensionInstance XAML для целевого элемента. |
| SetValue(DependencyProperty, Object) |
Задает локальное значение свойства зависимостей в DependencyObject. (Унаследовано от DependencyObject) |
| UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
Отменяет уведомление об изменении, которое ранее было зарегистрировано путем вызова RegisterPropertyChangedCallback. (Унаследовано от DependencyObject) |