방법: 뷰에서 데이터 필터링

이 예제에서는 뷰에서 데이터를 필터링하는 방법을 보여 줍니다.

예제

필터를 만들려면 필터링 논리를 제공하는 메서드를 정의합니다. 메서드는 콜백으로 사용되며 형식 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

참고 항목