DataTemplate 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
描述数据对象的可视结构。 对模板中显示数据值的特定元素使用数据绑定。
/// [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
- 继承
- 属性
- 实现
示例
以下示例使用 DataTemplate 显示 ListView 的项。 在此示例中, ListView 绑定到 对象的集合 Customer
。 DataTemplate 包含绑定到 、 LastName
和 Address
属性的 FirstName
TextBlock 控件。 有关数据绑定的详细信息,请参阅 深入的数据绑定。
<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、 Hub、 HubSection、 Pivot、 Slider、 TimePicker、 ToggleSwitch;其中一些也有FooterTemplate
通常使用 DataTemplate 来指定数据的可视表示形式。 将 ItemsControl (如 ListBox )绑定到整个集合时,DataTemplate 对象特别有用。 如果没有特定说明, ListBox 将显示集合中对象的字符串表示形式。 使用 DataTemplate 定义每个数据对象的外观。 DataTemplate 的内容将成为数据对象的可视结构。
通常在 DataTemplate 中使用数据绑定。 例如,假设 ListView 绑定到对象的集合 Customer
,并将 ItemTemplate 属性设置为 DataTemplate。 创建 ListView 时,会为Customer
集合中的每个对象创建一个 ListViewItem,并将 ListViewItem 的 DataContext 设置为相应的客户。 换句话说,第一个 ListViewItem 的 DataContext 设置为第一个客户,第二个 ListViewItem 的 DataContext 设置为第二个客户,依此。 可以绑定 DataTemplate 中的元素以显示来自每个 Customer
对象的属性值。
还可以使用 DataTemplate 在多个 ContentControl 对象之间共享 UIElement 对象。 例如,假设应用程序上需要多个按钮才能具有相同的图形。 可以创建包含图形的 DataTemplate,并将其用作按钮的 ContentTemplate 。 ContentTemplate 的数据模板也可以使用数据绑定。 但在这种情况下,数据上下文与应用模板的 元素相同。 通常,这是一个数据对象,并且没有项的概念。
可以在 XAML 中将 DataTemplate 作为 ItemTemplate 属性元素的直接子元素放置。 这称为 内联模板 ,如果你不需要对 UI 的其他区域使用相同的数据模板,则可以执行此操作。 还可以将 DataTemplate 定义为资源,然后将该资源引用为 ItemTemplate 属性的值。 成为资源后,可以对需要数据模板的多个 UI 元素使用同一模板。 如果将数据模板分解为 Application.Resources,则甚至可以为 UI 的不同页面共享同一模板。
数据模板内容的 XAML 用法不会公开为可设置的代码属性。 它是内置于 DataTemplate 的 XAML 处理中的特殊行为。
对于高级数据绑定方案,你可能希望让数据的属性确定哪个模板应生成其 UI 表示形式。 对于此方案,可以使用 DataTemplateSelector 并设置属性(如 ItemTemplateSelector )将其分配给数据视图。 DataTemplateSelector 是你自己编写的逻辑类,它具有一个方法,该方法根据你自己的与数据交互的逻辑将一个 DataTemplate 返回到绑定引擎。 有关详细信息,请参阅深入了解数据绑定。
XAML 附加属性
DataTemplate 是 XAML 附加属性的主机服务类。
为了支持 XAML 处理器访问附加属性,以及向代码公开等效 的 get 和 set 操作,每个 XAML 附加属性都有一对 Get 和 Set 访问器方法。 在代码中获取或设置值的另一种方法是使用依赖属性系统,调用 GetValue 或 SetValue ,并将标识符字段作为依赖属性标识符传递。
附加属性 | 说明 |
---|---|
ExtensionInstance | 获取或设置一个扩展实例,该实例定义用于分阶段呈现数据模板的帮助程序方法。 |
构造函数
DataTemplate() |
初始化 DataTemplate 类的新实例。 |
属性
Dispatcher |
始终在Windows 应用 SDK应用中返回 |
DispatcherQueue |
获取 |
ExtensionInstanceProperty |
标识 ExtensionInstance XAML 附加属性。 |
附加属性
ExtensionInstance |
获取或设置一个扩展实例,该实例定义用于分阶段呈现数据模板的帮助程序方法。 |