Daten können auf unterschiedlichste Weisen gefiltert werden. Eine Variante besteht darin, die Daten bereits gefiltert aus der Quelle (Datenbank, XML, etc.) zu lesen und in einem ItemsControl (ListBox, ComboBox, ListView etc.) anzuzeigen.
Soll nun dieselbe Collection in unterschiedlichen Elementen auf Basis einer bestimmten Filterung (festgelegt, oder definiert durch Benutzereingaben) angezeigt werden, dann bietet sich die Verwendung einer CollectionViewSource an. Dadurch werden insgesamt drei Möglichkeiten zur Verfügung gestellt:
- Sortierung
- Gruppierung
- Filterung
Zur Filterung bietet die CollectionViewSource ein Ereignis Filter an. Dieses kann abonniert werden um eine Filterung vorzunehmen. Für jedes Item der Auflistung wird dieses Ereignis ausgelöst. Die EventArgs liefern hierbei das betroffene Item, als auch die EigenschaftAccepted. Entspricht das Item den gewünschten Filterkriterien ist diese Eigenschaft auf true zu stellen, andernfalls auf false.
Anstatt nun das ItemsControl direkt an eine Liste zu binden, wird sie an die jeweilige CollectionViewSource gebunden und somit mit der definierten Filterung versehen. Ein einfacher Weg, eine Filterung vorzunehmen.
Auf .NET GUI habe ich ein entsprechendes Beispiel veröffentlicht, welches den Umgang mit der CollectionViewSource zeigt.