如何:筛选视图中的数据

更新:2007 年 11 月

此示例演示如何筛选视图中的数据。

示例

若要创建一个筛选器,请定义一种用来提供筛选逻辑的方法。该方法用作回调并接受类型为 object 的参数。下面的方法返回 filled 属性设置为“No”(否)的所有 Order 对象,并筛选掉其余对象。

Public Function Contains(ByVal de As Object) As Boolean
    Dim order1 As Order = TryCast(de, Order)
    Return (order1.Filled Is "No")
End Function
public bool Contains(object de)
{
    Order order = de as Order;
    //Return members whose Orders have not been filled
    return(order.Filled== "No");
}

然后,您可以应用筛选器,如下例所示。在本示例中,myCollectionView 是一个 ListCollectionView 对象。

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

若要撤消筛选,可以将 Filter 属性设置为 null:

myCollectionView.Filter = null;

有关如何创建或获取视图的信息,请参见如何:获取数据集合的默认视图。有关完整的示例,请参见在视图中对项进行排序和筛选的示例

如果您的视图对象来自 CollectionViewSource 对象,则可以通过为 Filter 事件设置事件处理程序来应用筛选逻辑。在下面的示例中,listingDataView 是 CollectionViewSource 的一个实例。

listingDataView.Filter += new FilterEventHandler(ShowOnlyBargainsFilter);

下面将演示示例 ShowOnlyBargainsFilter 筛选事件处理程序的实现。此事件处理程序使用 Accepted 属性筛选掉 CurrentPrice 为 $25 或更高的 AuctionItem 对象。

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;
        }
    }
}

有关完整的示例,请参见数据绑定演示

请参见

任务

如何:在视图中对数据进行排序

概念

数据绑定概述

参考

CanFilter

CustomFilter

其他资源

数据绑定示例

数据绑定帮助主题