Domanda

Di recente mi sono imbattuto in un problema in cui il WPF ListView Il controllo sembra limitare la capacità di ordinare i suoi oggetti. In particolare, sto avendo un sacco di difficoltà a cercare di ottenere un SortDescription riconoscere le proprietà nidificate (proprietà delle proprietà).

Per l'ordinamento diretto per proporzioni, la seguente riga dovrebbe fare il lavoro:

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

E in effetti funziona bene per me. Tuttavia, perché il ItemSource per me ListView è un (fortemente tipo) DataTable, alcune delle colonne sono legate alle proprietà nidificate della riga (cioè Row.OtherTableRow.SubProperty Stile percorso di associazione) - È il modo in cui i set di dati Ado.NET funzionano per i database gerarchici.

Quello che vorrei fare è qualcosa del genere:

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

Ma sfortunatamente quella linea lancia un ArgumentException:

Il tipo di "ordini" non ha proprietà denominate "riga. [Id], quindi non è possibile ordinare la raccolta dei dati.

Stranamente, non ho problemi di rilegatura per le proprietà nidificate. In effetti, i campi mostrano perfettamente bene nel ListView... né l'aggiunta di un PropertyGroupDescription a listView.GroupDescriptions dammi qualche problema con le proprietà nidificate - è solo SortDescriptions!

È questo ma una limitazione di WPF/il ListView controllo? C'è un modo per ottenere supporto come parte del framework o sarò sfortunato lì? Se sfortunatamente lo sono, e questa incoerenza è inevitabile, apprezzerei molto se qualcuno potesse suggerire un hack o una soluzione alternativa per questo scenario di proprietà nidificate. Ho già provato alcune idee, ma tutte con un successo minimo.

Nota: mi rendo conto che un ORM potrebbe risolvere i miei problemi, ma temo che questo non sia affatto possibile per l'attuale progetto su cui sto lavorando. I set di dati ADO.NET semplici dovranno fare.

È stato utile?

Soluzione

Secondo Windows Presentation Foundation Unleased (Adam Nathan), è possibile lanciare la vista predefinita a un ListCollectionView e impostare un'implementazione personalizzata ICOMparer sulla sua proprietà CustomSort.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top