Laden...

CollectionView filtern und doppelte Einträge nur einmal anzeigen

Erstellt von Cabur vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.097 Views
C
Cabur Themenstarter:in
4 Beiträge seit 2019
vor 4 Jahren
CollectionView filtern und doppelte Einträge nur einmal anzeigen

Hallo liebe Community,

ich habe eine Frage an euch. Ich lade Daten aus einer Datenbank in eine CollectionView und lasse die Daten dann in meiner View anzeigen. Das klappt auch alles soweit ganz gut. Die Daten setzen sich auch Automarke, Modell und Baujahr zusammen. Nun ist klar, dass unter Automarken Einträge doppelt sind; z.B.:

VW - Golf - 2015
VW - Polo - 2010
Opel - Astra - 2006
Opel - Corsa - 2001
BMW - X5 - 2019

Jetzt möchte ich nur auf die Automarke zugreifen und diese so filtern, dass jede Automarke nur einmal in einer Combobox angezeigt wird. Bisher habe ich nur geschafft, dass in der Combobox die Automarke mehrmals (so viele Einträge wie in der CollectionView) angezeigt werden.

Wie schaffe ich, dass jede Automarke nur einmal angezeigt wird und die CollectionView dementsprechend gefiltert wird?

C
Cabur Themenstarter:in
4 Beiträge seit 2019
vor 4 Jahren

Danke für den ersten Hinweis. Ich habe mich jetzt eine Weile damit beschäftigt, aber anscheinend stehe ich tierisch auf dem Schlauch. Ich bekomme es einfach nicht hin.

Folgendermaßen sieht mein Viewmodel aus:


public class CarViewModel : BaseViewModel
{
     private CarModel carModel = new CarModel();

     private ICollectionView _cars;
     public ICollectionView Cars { get { return _cars; } }

     private IList<CarModel> carList;

     public CarViewModel()
     {
          carList = CarModel.GetCars();
          _cars = CollectionViewSource.GetDefaultView(carList);
          _cars.Filter = FilterHersteller;
     }

     private bool FilterVW(object filter)
     {
          return (filter as CarModel).Hersteller.IndexOf("VW", StringComparison.OrdinalIgnoreCase) >=0;
     }

     private bool FilterHersteller(object filter)
     {
          //Hier soll die Filteroption stehen, damit jeder Hersteller nur einmal angezeigt wird
     }
}

Wie muss die Methode mit Distinct aussehen?

T
2.222 Beiträge seit 2008
vor 4 Jahren

@Cabur
Th69 hat dir doch schon die nötigen Info geliefert.
Kurz mal nach C# Linq und Distinct liefert einige sehr gute Beispiele.
Selbst die Doku zu Distinct liefert dir alles was du brauchst.

Doku

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

4.938 Beiträge seit 2008
vor 4 Jahren

@Cabur: Ich war davon ausgegangen, daß du eine neue gefilterte Liste zurückgibst.

Bei Benutzung des Filter-Ereignisses wirst du einen leicht anderen Ansatz benötigen, s. z.B. C# - how to get distinct items from a Collection View (aber für große Listen ist dieser Ansatz nicht zu empfehlen, da der Aufwand dann O(N*N) ist, anstatt O(N)).