5 Stimmen

Das Ändern eines Elements in einer sortierten WPF-ListAnsicht ändert nicht die Sortierposition dieses Elements

Ich habe eine sortierbare Listview, die mit Live-Daten gefüllt wird, sobald sie eintreffen. Das Sortieren funktioniert einwandfrei, aber das eigentliche Problem tritt auf, wenn ein Element nach dem Hinzufügen zur Sammlung modifiziert wird. Die Position des geänderten Elements ändert sich nicht, egal in welcher Reihenfolge sortiert wird.

Ich habe gegoogelt, aber konnte keine bessere Lösung finden, um meine Listview zu einer perfekt sortierten Listview zu machen.

Lösungen??

0 Stimmen

Können Sie uns den Code zeigen, den Sie für das Sortieren verwenden, wenn die Daten eintreffen?

0 Stimmen

@Tony - Nun, der Code ist zu umfangreich, um hier gepostet zu werden. Aber das Problem scheint bei einem beliebigen sortierbaren Listview-Beispiel im Netz zu liegen.

1 Stimmen

Wir können wirklich nicht helfen, es sei denn, wir wissen, wie Sie den ListView bevölkern. Fügen Sie Elemente zu einer ObservableCollection hinzu, die der ListView als Quelle verwendet? Fügen Sie die Elemente auf andere Weise zum ListView hinzu?

4voto

Dr. WPF Punkte 636

Ich nehme an, Sie folgen einem ähnlichen Ansatz wie dieses MSDN-Beispiel. Falls ja, erfolgt die Sortierung basierend auf den SortDescriptions der Auflistungssicht. Solange die Quellensammlung beobachtbar ist, sollte die Sortierreihenfolge eingehalten werden, wenn Elemente hinzugefügt oder entfernt werden.

Das eigentliche Problem tritt auf, wenn ein Element nach dem Hinzufügen zur Sammlung geändert wird. In diesem Fall wird die Sortierung der Sammlung nicht automatisch neu vorgenommen.

Ich erkläre das Problem ausführlich in 'E' steht für Editierbare Sammlung (in meiner ItemsControl A bis Z Serie). Außerdem stelle ich einige Workarounds vor, die verschiedene Leistungsstufen bieten. Der drastischste ist, eine erneute Sortierung der gesamten Sammlung zu erzwingen, indem Refresh() auf der CollectionView aufgerufen wird. Wenn möglich, würde ich das vermeiden und eine bessere Option verwenden, wie z.B. das Implementieren von IEditableObject auf Ihren Elementen und das Ausführen von Edit() gefolgt von Commit(), wenn sich die Eigenschaften eines Elements ändern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X