Gewusst wie: Filtern von Daten in einer Ansicht

In diesem Beispiel wird gezeigt, wie Sie Daten in einer Ansicht filtern können.

Beispiel

Um einen Filter zu erstellen, definieren Sie eine Methode, die die Filterlogik bereitstellt. Die Methode wird als Rückruf verwendet und akzeptiert einen Parameter des Typs object. Die folgende Methode gibt alle Order-Objekte zurück, bei denen die filled-Eigenschaft auf „No“ festgelegt ist, und filtert die übrigen Objekte heraus.

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

Anschließend können Sie den Filter anwenden, wie im folgenden Beispiel gezeigt. In diesem Beispiel handelt es sich bei myCollectionView um ein ListCollectionView-Objekt.

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

Um die Filterung aufzuheben, können Sie die Eigenschaft Filter auf null festlegen:

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

Informationen zum Erstellen oder Abrufen einer Ansicht finden Sie unter Abrufen der Standardansicht einer Datenauflistung. Das vollständige Beispiel finden Sie unter Sortieren und Filtern von Elementen in einem Ansichtsbeispiel.

Wenn Ihr Ansichtsobjekt aus einem CollectionViewSource-Objekt stammt, wenden Sie die Filterlogik an, indem Sie einen Ereignishandler für das Filter-Ereignis festlegen. Im folgenden Beispiel ist listingDataView eine Instanz von CollectionViewSource.

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

Nachfolgend sehen Sie die Implementierung des beispielhaften ShowOnlyBargainsFilter-Filterereignishandlers. Dieser Ereignishandler verwendet die Accepted-Eigenschaft zum Filtern von AuctionItem-Objekten, bei denen CurrentPrice $25 oder mehr beträgt.

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

Weitere Informationen