Поделиться через


Как выполнить фильтрацию данных в представлении

В этом примере показано, как фильтровать данные в представлении.

Пример

Чтобы создать фильтр, определите метод, предоставляющий логику фильтрации. Метод используется в качестве обратного вызова и принимает параметр типа 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

См. также