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
.NET Desktop feedback