WPF ListView - Sortieren nach verschachtelten Eigenschaften
-
19-09-2019 - |
Frage
Ich bin kürzlich auf ein Problem gestolpert, bei dem der WPF ListView
Die Kontrolle scheint die Fähigkeit einzuschränken, ihre Gegenstände zu sortieren. Insbesondere habe ich große Schwierigkeiten, eine zu bekommen SortDescription
Erkennen verschachtelter Eigenschaften (Eigenschaften von Eigenschaften).
Für eine einfache Sortierung durch Propeties sollte die folgende Zeile den Job erledigen:
listView.Items.SortDescriptions.Add(new SortDescription("MyProperty",
ListSortDirection.Ascending));
Und in der Tat funktioniert es gut für mich. Aber weil die ItemSource
für mein ListView
ist ein (stark typisch) DataTable
, Einige der Säulen sind an verschachtelte Eigenschaften der Reihe (dh an verschachtelte Eigenschaften der Reihe Row.OtherTableRow.SubProperty
Bindungspfadstil) - So funktionieren die Ado.net -Datensätze für hierarchiale Datenbanken.
Was ich gerne tun möchte, ist so etwas:
listView.Items.SortDescriptions.Add(new SortDescription("MyProperty.SubProperty",
ListSortDirection.Ascending));
Aber leider wirft diese Linie eine ArgumentException
:
'Bestellungen' Typ hat keine Eigenschaft mit dem Namen 'Row. [ID]', daher kann die Datenerfassung nicht sortiert werden.
Seltsamerweise habe ich kein Problem damit, verschachtelte Eigenschaften zu binden. In der Tat zeigen die Felder in der vollkommen gut an ListView
... Auch ein Hinzufügen eines PropertyGroupDescription
zu listView.GroupDescriptions
Geben Sie mir Probleme mit verschachtelten Eigenschaften - es ist nur SortDescriptions
!
Ist das nur eine Einschränkung von WPF/dem ListView
Kontrolle? Gibt es eine Möglichkeit, im Rahmen des Rahmens Unterstützung zu erhalten, oder werde ich dort kein Glück mehr haben? Wenn ich leider bin und diese Inkonsistenz unvermeidlich ist, würde ich sehr schätzen, ob jemand einen Hack oder eine Problemumgehung für dieses Szenario verschachtelter Eigenschaften vorschlagen könnte. Ich habe schon ein paar Ideen ausprobiert, aber alle mit minimalem Erfolg.
Hinweis: Mir ist klar, dass ein Orm meine Probleme durchaus lösen kann, aber ich fürchte, dies ist für das aktuelle Projekt, an dem ich arbeite, überhaupt nicht machbar. Einfache ADO.NET -Datensätze müssen tun.
Lösung
Laut der Windows Presentation Foundation Founds freigelassen (Adam Nathan) können Sie die Standardansicht in eine ListCollectionView geben und eine benutzerdefinierte IComenParer -Implementierung in seine Zollgeschäfte einstellen.