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


DataTemplate Класс

Определение

Описывает визуальную структуру объекта данных. Используйте привязку данных для определенных элементов шаблона, отображающих значения данных.

/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DataTemplate : FrameworkTemplate
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 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(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class DataTemplate : FrameworkTemplate
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 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
Public Class DataTemplate
Inherits FrameworkTemplate
Implements IElementFactory
<DataTemplate ...>
  templateContent
</DataTemplate>
 

Наследование
Object IInspectable DependencyObject FrameworkTemplate DataTemplate
Атрибуты
Реализации

Требования к Windows

Семейство устройств
Windows 10 (появилось в 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (появилось в v1.0)

Примеры

В следующем примере элемент DataTemplate используется для отображения элементов ListBox. В этом примере Элемент ListBox привязан к коллекции Customer объектов . DataTemplate содержит элементы управления TextBlock , которые привязываются к свойствам FirstName, LastNameи Address . Дополнительные сведения о привязке данных см. в разделе Привязка данных.

<Grid>
    <Grid.Resources>
        <src:Customers x:Key="customers"/>
    </Grid.Resources>

    <ListBox ItemsSource="{StaticResource customers}" Width="350" Margin="0,5,0,10">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Padding="5,0,5,0"
          Text="{Binding FirstName}" />
                    <TextBlock Text="{Binding LastName}" />
                    <TextBlock Text=", " />
                    <TextBlock Text="{Binding Address}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</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"));
    }

}
Public Class Customer
    Private _firstName As String
    Private _lastName As String
    Private _address As String

    Public Property FirstName() As String
        Get
            Return _firstName
        End Get

        Set(ByVal value As String)
            _firstName = value
        End Set
    End Property

    Public Property LastName() As String
        Get
            Return _lastName
        End Get

        Set(ByVal value As String)
            _lastName = value
        End Set
    End Property

    Public Property Address() As String
        Get
            Return _address
        End Get

        Set(ByVal value As String)
            _address = value
        End Set
    End Property

    Public Sub New(ByVal firstName As String, ByVal lastName As String, ByVal address As String)
        Me.FirstName = firstName
        Me.LastName = lastName
        Me.Address = address
    End Sub

End Class

Public Class Customers
    Inherits ObservableCollection(Of Customer)

    Public Sub New()
        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"))
    End Sub

End Class

Комментарии

Объект DataTemplate используется в качестве значения для следующих свойств:

Для указания визуального представления данных обычно используется DataTemplate. Объекты DataTemplate особенно полезны при привязке ItemsControl , например ListBox , ко всей коллекции. Без конкретных инструкций элемент ListBox отображает строковое представление объектов в коллекции. Используйте DataTemplate для определения внешнего вида каждого объекта данных. Содержимое DataTemplate становится визуальной структурой объектов данных.

Привязка данных обычно используется в DataTemplate. Например, предположим, что Элемент ListBox привязан к коллекции Customer объектов , а свойству ItemTemplate присвоено значение DataTemplate. При создании ListBox создается элемент ListBoxItem для каждого Customer элемента в коллекции, а dataContextэлемента ListBoxItem устанавливается для соответствующего клиента. Другими словами, DataContext первого ListBoxItem задается для первого клиента, DataContext второго ListBoxItem — для второго клиента и т. д. Вы можете привязать элементы в 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 Возвращает или задает экземпляр расширения, определяющий вспомогательные методы для поэтапной отрисовки шаблона данных.

Журнал версий

Версия Windows Версия пакета SDK Добавленная стоимость
1809 17763 GetElement
1809 17763 RecycleElement

Конструкторы

DataTemplate()

Инициализирует новый экземпляр класса DataTemplate .

Свойства

Dispatcher

Возвращает объект CoreDispatcher , с которым связан этот объект. CoreDispatcher представляет собой средство, которое может получить доступ к 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)

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

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