WPF DataTemplate 数据模板
WPF 中的 DataTemplate(数据模板) 是用于定义数据对象如何在 UI 中呈现的核心机制。它允许开发者将数据的逻辑结构与可视化展示分离,从而更灵活地控制数据的显示方式。
1. DataTemplate 的作用
数据驱动的 UI:根据数据对象的类型或属性动态决定其可视化表现形式。
解耦数据与 UI:数据对象无需关心如何显示,UI 只负责如何渲染数据。
复用性:同一数据模板可以在多个控件或场景中重复使用。
2. 常见应用场景
ItemsControl 的项模板
为列表控件(如 ListBox、ListView、ComboBox)定义项的外观:
<Window x:Class="WpfApp3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp3"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<ListBox x:Name="list">
<!--<ListBoxItem>
<StackPanel Orientation="Horizontal">
<Border Height="10" Width="10" Background="red" Margin='5'/>
<TextBlock Text="红色" Margin="10,5,15,5"/>
</StackPanel>
</ListBoxItem>
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<Border Height="10" Width="10" Background="blue" Margin='5'/>
<TextBlock Text="蓝色" Margin="10,5,15,5"/>
</StackPanel>
</ListBoxItem>-->
<ListBox.ItemTemplate>
<DataTemplate>
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<Border Height="10" Width="10" Background="{Binding Color}" Margin='5'/>
<TextBlock Text="{Binding Name}" Margin="10,5,15,5"/>
</StackPanel>
</ListBoxItem>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<ColorItem> listDataSource = new List<ColorItem>();
listDataSource.Add(new ColorItem() { Color = "#EED2EE", Name = "#EED2EE" });
listDataSource.Add(new ColorItem() { Color = "#EE5C42", Name = "#EE5C42" });
listDataSource.Add(new ColorItem() { Color = "#7CFC00", Name = "#7CFC00" });
list.ItemsSource = listDataSource;
}
}
public class ColorItem
{
public string Name { get; set; }
public string Color { get; set; }
}