WPF 具有数据模板的概念,可将可视化与基础数据分开。ItemTemplate
ListView(与任何其他 ItemsControl 一样)通过属性为其项目提供数据模板。您可以在样式化和模板化 ItemsControl中阅读有关内容。
鉴于这个简单的 DataItem 类
public class DataItem
{
public string ItemText { get; set; }
public Brush ItemBackground { get; set; }
}
该类的一个非常简单的 DataTemplate 可能只包含一个 Border 和一个 TextBlock 控件:
<ListView Name="listView">
<ListView.ItemTemplate>
<DataTemplate>
<Border Background="{Binding ItemBackground}">
<TextBlock Margin="4" Text="{Binding ItemText}"/>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
在带有 GridView 的 ListView 中,您可以指定CellTemplate
GridViewColumn 而不是ItemTemplate
:
<ListView Name="listView">
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Border Background="{Binding ItemBackground}">
<TextBlock Margin="4" Text="{Binding ItemText}"/>
</Border>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
现在您可以像这样简单地将 DataItems 添加到 ListView 中:
listView.Items.Add(new DataItem { ItemText = "Item 1", ItemBackground = Brushes.AliceBlue });
listView.Items.Add(new DataItem { ItemText = "Item 2", ItemBackground = Brushes.LemonChiffon });
listView.Items.Add(new DataItem { ItemText = "Item 3", ItemBackground = Brushes.LightCoral });
为了使 UI 对 DataItem 对象的更改做出反应,DataItem 类必须实现INotifyPropertyChanged。
public class DataItem : INotifyPropertyChanged
{
...
}
为了更好地分离数据和 UI,您不会直接将项目添加到Items
ListView 的集合中,而是将ItemsSource
属性绑定到 type 的属性ObservableCollection<DataItem>
:
<ListView ItemsSource="{Binding DataItems}">
...
</ListView>
您可以在数据绑定概述/绑定到集合中阅读有关此主题的更多信息。