Völlig ramponiert von etwas, das einfach zu sein scheint und zu Tode getan wurde ... Trotzdem immer noch ratlos.
Was ich machen möchte: Ich habe eine WinForms ListBox. Seine Elemente sind mit Objekten gefüllt, das DisplayMember ist gesetzt. Wenn die App ausgeführt wird, ändern sich möglicherweise die Daten in den aufgelisteten Elementen, einschließlich des Felds hinter dem DisplayMember. Ich möchte, dass der in der ListBox angezeigte Text sich ändert, wenn dies geschieht, und ich möchte auch, dass die ListBox sich selbst neu sortiert, so dass die Elemente in alphabetischer Reihenfolge bleiben.
Eine BindingList funktioniert gut, um den angezeigten Text zu aktualisieren, wenn sich die Daten ändern, aber für mein Leben kann ich es nicht sortieren.
Ich habe dies überprüft: Ссылка
Ergänzen Sie hier zahlreiche Threads, wie das geht, aber nichts davon scheint für eine ListBox zu funktionieren.
Das Festlegen der Sorted-Eigenschaft in der ListBox ist ebenfalls nicht hilfreich.
Was muss ich tun, damit eine ListBox sich selbst sortiert?
Sie können ein BindingSource-Objekt verwenden. Ziehen Sie es einfach per Drag & Drop in Ihr Formular und verweisen Sie Ihre ListBox.DataSource-Eigenschaft auf dieses BindingSource-Objekt. Wechseln Sie dann zu den BindingSource-Eigenschaften und definieren Sie Sort nach Bedarf.
Dann können Sie im Code myBindingSource.DataSource = myCollection
und voila setzen, Ihre Listbox wird ausgefüllt und sortiert.
Einfach.
Wie bei Patrol02s Post möchten Sie jedoch versuchen, die DataSource auf null zu setzen und sie dann basierend auf einem Ereignis, das durch die Änderung der Listengröße ausgelöst wurde, neu zuzuweisen. Sie könnten das Beobachtermuster für die Sammlung verwenden und die Methoden Hinzufügen und Entfernen überschreiben, um Beobachter anzuweisen, sich erneut zu binden.
Durch das Zurücksetzen der DataSource wird die ListBox effektiv sortiert:
%Vor%Aber das ist nicht automatisch. Wie ich es verstehe, sollte das Sortieren immer dann erfolgen, wenn das Feld hinter dem DisplayMember aktualisiert wird, durch ein Ereignis oder etwas ähnliches ...
Siehe meinen kompletten Test trotzdem:
%Vor%Der LVS_SORT-Stil im Listensteuerelement sollte funktionieren, Sie sagen jedoch, dass dies nicht der Fall ist. Ich würde überprüfen, ob es angewendet wird. Ich hatte nie Probleme mit einem selbstsortierenden Dropdown-Listen-Steuerelement. Beachten Sie, dass dies ein Listensteuerelement ist, von dem wir sprechen, kein ListView-Steuerelement.
Ich habe dies getan, indem ich eine neue Klasse, BindingSortingList, erstellt habe, die von BindingList geerbt wurde. Darin überschrieb ich alle notwendigen Methoden wie ApplySortCore () und RemoveSortCore (). Wenn Sie die Sortierung anwenden, müssen Sie sie intern in eine Standardliste kopieren, die sortierbar ist, sie sortieren und dann wieder in die Liste "this" kopieren. Es scheint verrückt, aber jetzt habe ich eine wiederverwendbare Klasse für diesen Zweck.
Tags und Links c# winforms listbox sorting bindinglist