Spezielle Filterfunktion benötigt

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von kafffee.

    Spezielle Filterfunktion benötigt

    Hallo und Guten Abend :)

    Ich hab da ein kleines Problem, welches meinen Horizont überschreitet, und zwar brauche ich für eine CollectionView eine DefaultView (auf gut deutsch ich muss eine Liste richtig initialisieren (sortieren und filtern)). Bisher hatte ich Folgendes:


    VB.NET-Quellcode

    1. Private _AnzuzeigendeAlben As ICollectionView
    2. _AnzuzeigendeAlben = CollectionViewSource.GetDefaultView(MainModule.InhaltGesamt.OrderBy(Function(o) o.Album).GroupBy(Function(f) f.Album).Select(Function(g) g.First()))
    3. _AnzuzeigendeAlben.SortDescriptions.Add(New SortDescription(NameOf(ViewModel.MP3FileInfoVM.Album), ListSortDirection.Ascending))



    Nur hat die Sache einen Haken:
    Wenn ein Album doppelt vorkommt, aber von zwei verschiedenen Interpreten kommt, wird nur einer der Datensätze angezeigt.
    Ich möchte aber, dass die Liste dann zwei Mal den gleichen Datensatz beinhaltet, jeweils mit den unterschiedlichent Interpreten.

    Zur Sache:

    Die Gesamtzahl aller Datensätze ist in MainModule.InhaltGesamt drin. Jeder Datensatz hat eine Property .Interpret und eine Property .Album.
    Also ist das hier inhaltlich ja falsch:
    MainModule.InhaltGesamt.OrderBy(Function(o) o.Album).GroupBy(Function(f) f.Album).Select(Function(g) g.First()) - und das scheint auch der einzig relevante Codeteil zu sein.
    Dann gruppier doch erst nach Interpret und dann sortier die Alben und gruppier sie und nimm das je erste Album.
    Aber Moment.
    Das heißt, von jedem Interpreten soll das alphabetisch erste Album angezeigt/hergenommen werden?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ne :) Folgendes Szenario:

    Jeder Datensatz ist ein Titel.

    Dieser Datensatz hat neben Titel auch ne Property Interpret und Property Album.

    So jetzt angenommen ich habe zwei verschiedene Interpreten, die aber beide ein Album "Greatest Hits" haben.

    Dann möchte ich nicht nur ein Mal "Greatest Hits" angezeigt bekommen, sondern zwei Mal.

    Das Ganze soll natürlich auch mit mehr als zwei funktionieren.

    Es sollen auch alle(!) verschiedenen Alben eines Interpreten angezeigt werden.

    Der Code den ich gepostet habe, ist falsch, da er mir bei diesem Szenario nur ein Mal "Greatest Hits" anzeigt.
    Am besten alles in eine ObservableCollection und dazu die schon verwendete ICollectionView, die hat so eine tolle Property mit dem Namen Filter und sogar noch mehr.

    learn.microsoft.com/de-de/dotn…w?view=windowsdesktop-7.0
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    @DTF

    Jou InhaltGesamt ist schon eine ObservableCollection und einen Filter für die Collectionview hab ich auch schon in Verwendung, der ist bei mir aber primär dafür da, die DefaultView noch weiter zu Filtern, z. B. wenn ich in eine Textbox nen Text eingebe.
    Es geht mir jetzt v. A. darum, die DefaultView richtig zu erstellen, also wie gruppiere, sortiere, usw. ich (mit LINQ?), um ein gescheite DefaultView zu bekommen...?

    Edit: Oder hat mir da @VaporiZed schon die Lösung gegeben? Sry ich probier das mal...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „kafffee“ ()

    Ich hab das anders geregelt als du. Ich habe eine Klasse AlbumModel, eine Klasse TitelModel. Klasse AlbumModel hat eine ObservableCollection<Titlemodel>. Beim importieren lege ich direkt Alben an wenn noch nicht vorhanden, füge auch direkt Titel hinzu, brauche dann nur noch filtern. Kein verkomplizierendes Einzeiler-Dingsda. Wobei die TitelModel klasse dann ein Feld AlbumId haben muss, dessen Wert ist dann der ID des übergeordneten AlbumModels, das hat auch eine unique id.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D