Ich habe ein WPF DataGrid, und ich habe es so, dass Sie es sortieren können, indem Sie auf die Spaltenüberschriften klicken. Es funktioniert, aber es ist instabil. Wie kann ich eine stabile Sortierung vornehmen?
Damit meine ich, wenn ich diesen Tisch habe:
%Vor%Wenn ich nach Studenten sortiere, funktioniert das wie erwartet:
%Vor%Aber wenn ich jetzt nach Klasse sortiere:
%Vor%Es hat die Sortierreihenfolge der Schüler zerstört (instabile Sortierung). Was ich will, ist eine stabile Sortierung, bei der die Reihenfolge erhalten bleibt:
%Vor%Scheint, dass es standardmäßig so funktionieren sollte, oder zumindest ein Toggle sein sollte. Hat jemand irgendwelche Vorschläge? @ Eiriks Idee des Shift-Klick funktioniert, und das zeigt, dass das Verhalten vorhanden ist. Aber ich würde wirklich gerne ohne Modifizierer arbeiten. Es sollte kein Grund sein, "nach diesem, dann diesem, dann diesem" zu sortieren, es sollte der Fall sein, den Algorithmus gegen einen anderen auszutauschen.
Siehe hierzu: Ссылка
Ich habe es geschafft, eine stabile Sortierung mit einem benutzerdefinierten Comparer zu bekommen, aber es fühlt sich irgendwie wie ein großer Hack an ...
Ich benutze die CustomSort-Eigenschaft von ListCollectionView, um meinen benutzerdefinierten Comparer zu setzen, für den ich die Sammlung bei der Instanziierung übergeben muss.
%Vor%In meinem benutzerdefinierten Comparer verwende ich die Sammlung während der Compare-Methode nur, um auf die Item-Indizes zurückzugreifen, wenn der reguläre Vergleich eine Null zurückgibt (sie sind gleich oder haben den gleichen Wert).
%Vor%Ich teste das immer noch, also kann ich nicht garantieren, dass das immer funktioniert ... Ein Problem wäre zum Beispiel, die Collection-Eigenschaft im Comparer zu aktualisieren. Oder unterstützt zwei Sortierrichtungen (jetzt daran arbeiten, sollte nicht schwierig sein). Oder überprüfen Sie, wie dies leistungsmäßig funktioniert.
Aber ich denke, die Idee ist klar; obwohl hacky, wie ich schon sagte.
Sie sollten in der Lage sein, nach mehreren Spalten zu sortieren, indem Sie die Umschalttaste gedrückt halten, wenn Sie auf die Spalten klicken. Versuchen Sie, auf die Klassenspalte zu klicken, halten Sie die Umschalttaste gedrückt und klicken Sie auf die Studentenspalte.
Hier ist eine Lösung zum Hinzufügen von Sortierung in Code hinter:
%Vor%Damit dies funktioniert, müssen Sie die Standardsortierung deaktivieren. Eine Möglichkeit, dies zu tun, besteht darin, das Sortierereignis wie folgt anzuhalten:
%Vor%Bearbeiten : Nachdem ich hbarcks Kommentar gelesen habe, habe ich deine Frage noch einmal gelesen und es scheint, dass ich einige Teile verpasst habe. Wenn Sie diesen Code ändern:
%Vor%dazu:
%Vor%Sie werden eine stabile Sortierung haben. Klicken Sie auf Student, um nach Student zu sortieren, und dann auf Class, um nach Class, Student zu sortieren. Wenn Sie beim Klicken die Strg-Taste gedrückt halten, löschen Sie die vorherige Sortierung, bevor Sie nach der Spalte sortieren, auf die geklickt wurde.