Поделиться через


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
Атрибуты
Реализации

Примеры

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

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

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

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

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

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

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

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