给你
我定义了一个绑定到Items(您的数据)的ItemsControl,并定义了一个分组样式来按照您的期望显示数据。
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border BorderBrush="Black" BorderThickness=".5" Padding="4">
<TextBlock Text="{Binding Name}" VerticalAlignment="Center" />
</Border>
<ItemsPresenter Grid.Column="1" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ItemsControl.GroupStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" BorderThickness=".5" Padding="4">
<TextBlock Text="{Binding Data}" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
以下是准备组的代码:
Items = new ObservableCollection<Item>();
Items.Add(new Item() { Key = "abcd", Data = 1 });
Items.Add(new Item() { Key = "abcd", Data = 2 });
Items.Add(new Item() { Key = "qwer", Data = 1 });
Items.Add(new Item() { Key = "qwer", Data = 2 });
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(Items);
PropertyGroupDescription groupDescription = new PropertyGroupDescription("Key");
view.GroupDescriptions.Add(groupDescription);
把一切交给WPF并享受样式和绑定的强大功能。
多级分组
要实现多级分组,只需将PropertyGroupDescription添加到view.GroupDescriptions中即可。
例如:
groupDescription = new PropertyGroupDescription("Key2");
view.GroupDescriptions.Add(groupDescription);
您可以创建任意数量的子组,只需一个用于分组的键。
ListView
并将其视图设置为 GridView
而不是 ItemsControl
是答案,它将帮助您定义列标题。 - pushpraj