Condividi tramite


Procedura: Filtrare i dati in una visualizzazione

In questo esempio viene illustrato come filtrare i dati in una visualizzazione.

Esempio

Per creare un filtro, definire un metodo che fornisce la logica di filtro. Il metodo viene usato come callback e accetta un parametro di tipo object. Il metodo seguente restituisce tutti gli oggetti Order con la proprietà filled impostata su "No", filtrando il resto degli oggetti.

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

È quindi possibile applicare il filtro, come illustrato nell'esempio seguente. In questo esempio myCollectionView è un oggetto ListCollectionView.

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

Per annullare il filtro, è possibile impostare la proprietà Filter su null:

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

Per informazioni su come creare o ottenere una vista, vedere Ottenere la visualizzazione predefinita di una raccolta di dati. Per l'esempio completo, vedere Ordinamento e filtro degli elementi in un esempio di visualizzazione.

Se l'oggetto view proviene da un oggetto CollectionViewSource, applica la logica di filtro impostando un gestore eventi per l'evento Filter. Nell'esempio seguente listingDataView è un'istanza di CollectionViewSource.

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

Di seguito viene mostrata l'implementazione del gestore eventi di filtro dell'esempio ShowOnlyBargainsFilter. Questo gestore eventi usa la proprietà Accepted per escludere AuctionItem oggetti con un CurrentPrice di $25 o superiore.

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

Vedere anche