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 Order
oggetti con la filled
proprietà 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 ListCollectionView oggetto .
myCollectionView.Filter = new Predicate<object>(Contains);
Me.myCollectionView.Filter = New Predicate(Of Object)(AddressOf Me.Contains)
Per annullare il filtro, è possibile impostare la Filter proprietà 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 CollectionViewSource oggetto , applicare 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 illustrata l'implementazione del gestore eventi di filtro di esempio ShowOnlyBargainsFilter
. Questo gestore eventi usa la Accepted proprietà per filtrare AuctionItem
gli oggetti con un CurrentPrice
valore 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
Vedi anche
.NET Desktop feedback