2009-07-23 19 views
1

Ich bin kürzlich über ein Problem gestolpert, bei dem das WPF-Steuerelement ListView die Möglichkeit zu beschränken scheint, seine Elemente zu sortieren. Insbesondere habe ich sehr viel Mühe, einen SortDescription zu bekommen, um verschachtelte Eigenschaften (Eigenschaften von Eigenschaften) zu erkennen.WPF ListView - Sortieren nach verschachtelten Eigenschaften

Für straight-forward Sortierung nach EIGENSCHAFTEN, sollte die folgende Zeile die Arbeit machen:

listView.Items.SortDescriptions.Add(new SortDescription("MyProperty", 
    ListSortDirection.Ascending)); 

Und in der Tat funktioniert es gut für mich. Da jedoch die ItemSource für meine ListView eine (stark typisierte) DataTable ist, sind einige der Spalten an verschachtelte Eigenschaften der Zeile gebunden (d. H. Row.OtherTableRow.SubProperty Bindungspfad Stil) - so arbeiten ADO.NET DataSets für hierarchische Datenbanken.

Was würde Ich mag es, so etwas tun:

listView.Items.SortDescriptions.Add(new SortDescription("MyProperty.SubProperty", 
    ListSortDirection.Ascending)); 

Aber leider, dass Linie wirft einen ArgumentException.

'Orders' Typ nicht Eigentum ‚Row genannt haben [ID ], kann die Datensammlung nicht sortieren.

Seltsamerweise habe ich kein Problem mit der Bindung an geschachtelte Eigenschaften. In der Tat zeigen die Felder in der ListView tadellos gut an ... Noch fügt das Hinzufügen einer PropertyGroupDescription zu listView.GroupDescriptions mir irgendwelche Probleme mit verschachtelten Eigenschaften zu - es ist nur SortDescriptions!

Ist dies aber eine Begrenzung der WPF/ListView Kontrolle? Gibt es irgendeine Möglichkeit, dass ich Unterstützung als Teil des Rahmens bekomme, oder werde ich dort kein Glück haben? Wenn ich leider bin und diese Inkonsequenz unvermeidlich ist, würde ich es sehr schätzen, wenn jemand einen Hack oder eine Workaround für dieses Szenario verschachtelter Eigenschaften vorschlagen könnte. Ich habe schon ein paar Ideen ausprobiert, aber alles mit minimalem Erfolg.

Hinweis: Mir ist klar, dass ein ORM meine Probleme lösen kann, aber ich fürchte, das ist für das aktuelle Projekt, an dem ich gerade arbeite, gar nicht machbar. Einfache ADO.NET DataSets müssen genügen.

Antwort

1

Laut Windows Presentation Foundation Unleased (Adam Nathan) können Sie die Standardansicht in eine ListCollectionView umwandeln und eine benutzerdefinierte IComparer-Implementierung auf die CustomSort-Eigenschaft festlegen.

+0

Prost für das. Ich schaue mir das Buch an, wenn es andere fortgeschrittene Szenarien gut abdeckt. :) – Noldorin

Verwandte Themen