Cómo: Filtrar datos en una vista

En este ejemplo se muestra cómo filtrar datos en una vista.

Ejemplo

Para crear un filtro, defina un método que proporcione la lógica de filtrado. El método se usa como devolución de llamada y acepta un parámetro de tipo object. El método siguiente devuelve todos los objetos Order con la propiedad filled establecida en "No", y filtra el resto de los 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

A continuación, puede aplicar el filtro, como se muestra en el ejemplo siguiente. En este ejemplo, myCollectionView es un objeto ListCollectionView.

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

Para deshacer el filtrado, puede establecer la propiedad Filter en null:

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

Para obtener información sobre cómo crear u obtener una vista, consulte Obtención de la vista predeterminada de una recopilación de datos. Para ver el ejemplo completo, consulte Ordenación y filtrado de elementos en una vista de muestra.

Si el objeto de vista procede de un objeto CollectionViewSource, se aplica lógica de filtrado estableciendo un controlador de eventos para el evento Filter. En el ejemplo siguiente, listingDataView es una instancia de CollectionViewSource.

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

A continuación se muestra la implementación del controlador de eventos del filtro ShowOnlyBargainsFilter de ejemplo. Este controlador de eventos usa la propiedad Accepted para filtrar los objetos AuctionItem que tienen un valor CurrentPrice de 25 USD o superior.

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

Vea también