Compartilhar via


Como filtrar dados em uma exibição

Este exemplo mostra como filtrar dados em uma exibição.

Exemplo

Para criar um filtro, defina um método que forneça a lógica de filtragem. O método é usado como um retorno de chamada e aceita um parâmetro do tipo object. O método a seguir retorna todos os objetos Order com a propriedade filled definida como "Não", filtrando o restante dos objetos.

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

Em seguida, você pode aplicar o filtro, conforme mostrado no exemplo a seguir. Neste exemplo, myCollectionView é um objeto ListCollectionView.

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

Para desfazer a filtragem, você pode definir a propriedade Filter como null:

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

Para obter informações sobre como criar ou obter uma exibição, consulte Obter a exibição padrão de uma coleção de dados. Para obter o exemplo completo, consulte Classificação e Filtragem de Itens em um Exemplo de Exibição.

Se o objeto de exibição for proveniente de um objeto CollectionViewSource, você aplicará a lógica de filtragem definindo um manipulador de eventos para o evento Filter. No exemplo a seguir, listingDataView é uma instância de CollectionViewSource.

listingDataView.Filter += new FilterEventHandler(ShowOnlyBargainsFilter);
AddHandler listingDataView.Filter, AddressOf ShowOnlyBargainsFilter

O texto a seguir mostra a implementação do manipulador de eventos do exemplo de filtro ShowOnlyBargainsFilter. Esse manipulador de eventos utiliza a propriedade Accepted para filtrar objetos AuctionItem que possuam um CurrentPrice igual ou superior a US$ 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

Consulte também