Практическое руководство. Фильтрация данных в представлении
В этом примере показано, как фильтровать данные в представлении.
Пример
Чтобы создать фильтр, определите метод, предоставляющий логику фильтрации. Метод используется в качестве обратного вызова и принимает параметр типа object
. Следующий метод возвращает все объекты Order
со свойством filled
"Нет", отфильтровав остальные объекты.
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 для фильтрации объектов AuctionItem
, имеющих CurrentPrice
, равное $25 или больше.
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