可以通过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的分组