WPF CollectionViewSource 分组

swift

1个回答

写回答

yushanshan013

2025-08-24 13:30

+ 关注

XML
XML

WPF CollectionViewSource 分组

WPF(Windows Presentation Foundation)是一种用于创建 Windows 桌面应用程序的技术。在 WPF 中,我们可以使用 CollectionViewSource 来对数据进行分组显示。CollectionViewSource 是一个用于对集合数据进行排序、筛选和分组的视图类。它提供了一种方便的方式来对数据进行分组,并在界面上展示分组结果。

CollectionViewSource 的基本用法

使用 CollectionViewSource 来对数据进行分组的基本步骤如下:

1. 在 XAML 中定义一个 CollectionViewSource 对象,并将其绑定到要分组的数据集合。

XML

<Window.Resources>

<CollectionViewSource x:Key="MyCollectionViewSource" Source="{Binding MyData}" />

</Window.Resources>

2. 在界面上使用 ItemsControl 控件,并将其 ItemsSource 属性绑定到 CollectionViewSource 的 View 属性。

XML

<ItemsControl ItemsSource="{Binding Source={StaticResource MyCollectionViewSource}, Path=View}" />

3. 在 CollectionViewSource 中设置 GroupDescriptions 属性,定义分组的规则。

XML

<CollectionViewSource.GroupDescriptions>

<PropertyGroupDescription PropertyName="Category" />

</CollectionViewSource.GroupDescriptions>

在上述代码中,我们使用 Category 属性对数据进行分组。可以根据实际情况选择需要分组的属性。

案例代码

下面我们来看一个简单的案例,演示如何使用 CollectionViewSource 对数据进行分组。

csharp

public class Product

{

public string Name { get; set; }

public string Category { get; set; }

}

public class ViewModel

{

public ObservableCollection<Product> MyData { get; set; }

public ViewModel()

{

MyData = new ObservableCollection<Product>

{

new Product { Name = "Product 1", Category = "Category A" },

new Product { Name = "Product 2", Category = "Category B" },

new Product { Name = "Product 3", Category = "Category A" },

new Product { Name = "Product 4", Category = "Category B" },

new Product { Name = "Product 5", Category = "Category C" },

new Product { Name = "Product 6", Category = "Category C" }

};

}

}

public partial class MAInWindow : Window

{

public MAInWindow()

{

InitializeComponent();

DataContext = new ViewModel();

}

}

在上述代码中,我们创建了一个 Product 类,其中包含 Name 和 Category 两个属性。然后创建了一个 ViewModel 类,其中包含一个 ObservableCollection 类型的属性 MyData。在 MAInWindow 的构造函数中,我们将 ViewModel 的实例赋值给 DataContext 属性,以便在 XAML 中进行数据绑定。

在 XAML 中,我们定义了一个 CollectionViewSource 对象 MyCollectionViewSource,并将其绑定到 MyData 属性。然后使用 ItemsControl 控件来展示分组后的数据。

XML

<Window x:Class="WpfApp.MAInWindow"</p> XMLns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

XMLns:x="http://schemas.microsoft.com/winfx/2006/xaml"

XMLns:local="clr-namespace:WpfApp"

Title="MAInWindow" Height="450" Width="800">

<Window.Resources>

<CollectionViewSource x:Key="MyCollectionViewSource" Source="{Binding MyData}">

<CollectionViewSource.GroupDescriptions>

<PropertyGroupDescription PropertyName="Category" />

</CollectionViewSource.GroupDescriptions>

</CollectionViewSource>

</Window.Resources>

<Grid>

<ItemsControl ItemsSource="{Binding Source={StaticResource MyCollectionViewSource}, Path=View}">

<ItemsControl.ItemTemplate>

<DataTemplate>

<TextBlock Text="{Binding Name}" />

</DataTemplate>

</ItemsControl.ItemTemplate>

<ItemsControl.GroupStyle>

<GroupStyle>

<GroupStyle.HeaderTemplate>

<DataTemplate>

<TextBlock FontWeight="Bold" Text="{Binding Name}" />

</DataTemplate>

</GroupStyle.HeaderTemplate>

</GroupStyle>

</ItemsControl.GroupStyle>

</ItemsControl>

</Grid>

</Window>

在上述 XAML 中,我们使用了一个简单的 TextBlock 来展示每个分组的名称,使用了 GroupStyle 来设置分组的标题样式。

使用 WPF 的 CollectionViewSource 可以方便地对数据进行分组展示。通过简单的 XAML 设置,我们可以实现对数据集合的分组显示,并对分组结果进行定制化展示。这为我们的界面设计和数据展示提供了更多的灵活性和便利性。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号