Язык

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
Наследование
Object IInspectable DependencyObject FrameworkTemplate DataTemplate
Атрибуты
Реализации

Примеры

В следующем примере для отображения элементов 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 Объект используется в качестве значения для этих свойств:

Обычно для указания визуального представления данных используется 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

Всегда возвращается null в приложении пакета SDK для приложений windows. Вместо этого используйте DispatcherQueue .

(Унаследовано от DependencyObject)
DispatcherQueue

Возвращает, DispatcherQueue с которым связан этот объект. Представляет DispatcherQueue собой объект, который может получить доступ к DependencyObject потоку пользовательского интерфейса, даже если код инициируется потоком, отличным от пользовательского интерфейса.

(Унаследовано от DependencyObject)
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)

Применяется к

См. также раздел