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 包含绑定到 、 LastNameAddress 属性的 FirstNameTextBlock 控件。 有关数据绑定的详细信息,请参阅 深入的数据绑定

<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 来指定数据的可视表示形式。 将 ItemsControl (如 ListBox )绑定到整个集合时,DataTemplate 对象特别有用。 如果没有特定说明, ListBox 将显示集合中对象的字符串表示形式。 使用 DataTemplate 定义每个数据对象的外观。 DataTemplate 的内容将成为数据对象的可视结构。

通常在 DataTemplate 中使用数据绑定。 例如,假设 ListBox 绑定到对象的集合 Customer ,并将 ItemTemplate 属性设置为 DataTemplate。 创建 ListBox 时,会为Customer集合中的每个项创建一个 ListBoxItem,并将 ListBoxItemDataContext 设置为相应的客户。 换句话说,第一个 ListBoxItemDataContext 设置为第一个客户,第二个 ListBoxItemDataContext 设置为第二个客户,依此。 可以绑定 DataTemplate 中的元素以显示来自每个 Customer 对象的属性值。

还可以使用 DataTemplate 在多个 ContentControl 对象之间共享 UIElement 对象。 例如,假设应用程序上需要多个按钮才能具有相同的图形。 可以创建包含图形的 DataTemplate,并将其用作按钮的 ContentTemplateContentTemplate 的数据模板也可以使用数据绑定。 但在这种情况下,数据上下文与应用模板的 元素相同。 通常,这是一个数据对象,并且没有项的概念。

可以在 XAML 中将 DataTemplate 作为 ItemTemplate 属性元素的直接子元素放置。 这称为 内联模板 ,如果你不需要对 UI 的其他区域使用相同的数据模板,则可以执行此操作。 还可以将 DataTemplate 定义为资源,然后将该资源引用为 ItemTemplate 属性的值。 成为资源后,可以对需要数据模板的多个 UI 元素使用同一模板。 如果将数据模板分解为 Application.Resources,则甚至可以为 UI 的不同页面共享同一模板。

数据模板内容的 XAML 用法不会公开为可设置的代码属性。 它是内置于 DataTemplate 的 XAML 处理中的特殊行为。

对于高级数据绑定方案,你可能希望让数据的属性确定哪个模板应生成其 UI 表示形式。 对于此方案,可以使用 DataTemplateSelector 并设置属性(如 ItemTemplateSelector )将其分配给数据视图。 DataTemplateSelector 是你自己编写的逻辑类,它具有一个方法,该方法根据你自己的与数据交互的逻辑将一个 DataTemplate 返回到绑定引擎。 有关详细信息,请参阅深入了解数据绑定

XAML 附加属性

DataTemplate 是 XAML 附加属性的主机服务类。

为了支持 XAML 处理器访问附加属性,以及向代码公开等效 的 getset 操作,每个 XAML 附加属性都有一对 Get 和 Set 访问器方法。 在代码中获取或设置值的另一种方法是使用依赖属性系统,调用 GetValueSetValue ,并将标识符字段作为依赖属性标识符传递。

附加属性 说明
ExtensionInstance 获取或设置一个扩展实例,该实例定义用于分阶段呈现数据模板的帮助程序方法。

版本历史记录

Windows 版本 SDK 版本 增值
1809 17763 GetElement
1809 17763 RecycleElement

构造函数

DataTemplate()

初始化 DataTemplate 类的新实例。

属性

Dispatcher

获取与此 对象关联的 CoreDispatcherCoreDispatcher 表示可以访问 UI 线程上的 DependencyObject 的工具,即使代码是由非 UI 线程启动的。

(继承自 DependencyObject)
ExtensionInstanceProperty

标识 ExtensionInstance XAML 附加属性。

附加属性

ExtensionInstance

获取或设置一个扩展实例,该实例定义用于分阶段呈现数据模板的帮助程序方法。

方法

ClearValue(DependencyProperty)

清除依赖属性的本地值。

(继承自 DependencyObject)
GetAnimationBaseValue(DependencyProperty)

返回为依赖属性建立的任何基值,该基值适用于动画未处于活动状态的情况。

(继承自 DependencyObject)
GetElement(ElementFactoryGetArgs)

创建或检索 DataTemplate 中声明的 UIElement 对象的现有实例。

GetExtensionInstance(FrameworkElement)

获取目标元素的 DataTemplate.ExtensionInstance XAML 附加属性的值。

GetValue(DependencyProperty)

DependencyObject 返回依赖属性的当前有效值。

(继承自 DependencyObject)
LoadContent()

DataTemplate 中创建 UIElement 对象。

ReadLocalValue(DependencyProperty)

如果设置了本地值,则返回依赖属性的本地值。

(继承自 DependencyObject)
RecycleElement(ElementFactoryRecycleArgs)

回收以前使用 GetElement 检索的 UIElement

RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

注册一个通知函数,用于侦听此 DependencyObject 实例上特定 DependencyProperty 的更改。

(继承自 DependencyObject)
SetExtensionInstance(FrameworkElement, IDataTemplateExtension)

设置目标元素的 DataTemplate.ExtensionInstance XAML 附加属性的值。

SetValue(DependencyProperty, Object)

设置 DependencyObject 上依赖属性的本地值。

(继承自 DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

取消以前通过调用 RegisterPropertyChangedCallback 注册的更改通知。

(继承自 DependencyObject)

适用于

另请参阅