방법: 뷰에서 데이터 필터링
이 예제에서는 뷰에서 데이터를 필터링하는 방법을 보여 줍니다.
예제
필터를 만들려면 필터링 논리를 제공하는 메서드를 정의합니다. 메서드는 콜백으로 사용되며 형식 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
그러면 다음 예제와 같이 필터를 적용할 수 있습니다. 이 예제에서는 myCollectionView
가 ListCollectionView 개체입니다.
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 이벤트에 대한 이벤트 처리기를 설정하여 필터링 논리를 적용합니다. 다음 예제에서 listingDataView
는 CollectionViewSource의 인스턴스입니다.
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
참고 항목
.NET Desktop feedback