方法: ビュー内のデータをフィルター処理する

この例では、ビュー内のデータをフィルター処理する方法を示します。

フィルターを作成するには、フィルター処理ロジックを提供するメソッドを定義します。 メソッドは、コールバックとして使用され、object 型のパラメーターを受け取ります。 次のメソッドでは、filled プロパティが "No" に設定されているすべての Order オブジェクトが返され、残りのオブジェクトはフィルターで除外されます。

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

次の例で示すように、フィルターを適用できます。 この例では、myCollectionViewListCollectionView オブジェクトです。

myCollectionView.Filter = new Predicate<object>(Contains);
Me.myCollectionView.Filter = New Predicate(Of Object)(AddressOf Me.Contains)

フィルター処理を元に戻すには、Filter プロパティを null に設定します。

myCollectionView.Filter = null;
Me.myCollectionView.Filter = Nothing

ビューを作成または取得する方法については、「データ コレクションの既定のビューを取得する」を参照してください。 完全な例については、「ビュー サンプルの項目の並べ替えとフィルター処理」を参照してください。

ビュー オブジェクトの元が CollectionViewSource オブジェクトの場合は、Filter イベントのイベント ハンドラーを設定することによって、フィルター処理ロジックを適用します。 次の例では、listingDataViewCollectionViewSource のインスタンスです。

listingDataView.Filter += new FilterEventHandler(ShowOnlyBargainsFilter);
AddHandler listingDataView.Filter, AddressOf 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;
        }
    }
}
Private Sub ShowOnlyBargainsFilter(ByVal sender As Object, ByVal e As FilterEventArgs)
    Dim product As AuctionItem = CType(e.Item, AuctionItem)
    If Not (product Is Nothing) Then
        'Filter out products with price 25 or above
        If product.CurrentPrice < 25 Then
            e.Accepted = True
        Else
            e.Accepted = False
        End If
    End If
End Sub

関連項目