WPF筛选排序和分组

Posted 我的地盘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF筛选排序和分组相关的知识,希望对你有一定的参考价值。

可以通过CollectionViewSource或者CollectionView对视图进行排序、筛选和分组。

一、通过CollectionViewSource

listingDataView是CollectionViewSource的一个实例。

1、排序

listingDataView.SortDescriptions.Add( new SortDescription("Category", ListSortDirection.Ascending));
istingDataView.SortDescriptions.Add( new SortDescription("StartDate", ListSortDirection.Ascending));

2、筛选

需要为Filter事件设置处理程序,在处理程序中提供数据的筛选逻辑

listingDataView.Filter += new FilterEventHandler(ShowOnlyBargainsFilter);

private void ShowOnlyBargainsFilter(object sender, FilterEventArgs e)
{
    AuctionItem product = e.Item as AuctionItem;
    if (product != null)
    {
        // Filter out products with price 25 or above
        if (product.CurrentPrice < 25)
        {
            e.Accepted = true;
        }
        else
        {
            e.Accepted = false;
        }
    }
}

3、分组

PropertyGroupDescription groupDescription = new PropertyGroupDescription();
groupDescription.PropertyName = "Category";
listingDataView.GroupDescriptions.Add(groupDescription);

二、通过CollectionView

myCollectionView是ListCollectionView的一个实例。通常使用CollectionViewSource获取。

1、排序

myCollectionView.SortDescriptions.Clear();
myCollectionView.SortDescriptions.Add(new SortDescription("OrderItem", ListSortDirection.Ascending));
myCollectionView.SortDescriptions.Add(new SortDescription("Customer",ListSortDirection.Ascending));

2、筛选

定义用来提供筛选逻辑的方法

public bool Contains(object de)
{
    Order order = de as Order;
    //Return members whose Orders have not been filled
    return(order.Filled== "No");
}

使用 Filter 属性来指定回调方法

myCollectionView.Filter = new Predicate<object>(Contains);

这种方式比较方便,通过指定不同的回调即可实现筛选,不必像CollectionViewSource那样添加删除事件(我想是这样的,没有验证)

3、分组

同CollectionViewSource的分组

以上是关于WPF筛选排序和分组的主要内容,如果未能解决你的问题,请参考以下文章

es分组排序和聚合后再筛选

快速入门pandas进行数据挖掘数据分析[多维度排序数据筛选分组计算透视表]

[wpf] collectionViewsource 排序 和分组

MySQL单表查询(分组-筛选-过滤-去重-排序)

mysql 等值连接案例之添加筛选分组排序多表

快速入门pandas进行数据挖掘数据分析[多维度排序数据筛选分组计算透视表]