Question

Je suis récemment tombé sur un problème où le WPF ListView Le contrôle semble restreindre la possibilité de trier ses éléments. Plus précisément, j'ai beaucoup de mal à essayer d'obtenir un SortDescription reconnaître les propriétés imbriquées (propriétés des propriétés).

Pour le tri simple par propreties, la ligne suivante doit faire le travail:

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

Et en effet, cela fonctionne bien pour moi. Cependant, parce que le ItemSource pour mon ListView est un (fortement typé) DataTable, certaines des colonnes sont liées aux propriétés imbriquées de la ligne (c'est-à-dire Row.OtherTableRow.SubProperty Le style de chemin de liaison) - c'est ainsi que les ensembles de données ADO.NET fonctionnent pour les bases de données hiérarchies.

Ce que j'aimerais faire, c'est quelque chose comme ceci:

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

Mais malheureusement, cette ligne lance un ArgumentException:

Le type de «commandes» n'a pas de propriété nommée «Row». [Id] », donc ne peut pas trier la collecte de données.

Curieusement, je n'ai aucun problème à lier les propriétés imbriquées. En effet, les champs s'affichent parfaitement bien dans le ListView... n'a plus ajouté un PropertyGroupDescription à listView.GroupDescriptions Donnez-moi des problèmes avec les propriétés imbriquées - c'est seulement SortDescriptions!

N'est-ce qu'une limitation de WPF / le ListView contrôler? Y a-t-il un moyen d'obtenir du soutien dans le cadre du cadre, ou vais-je avoir de la chance là-bas? Si je le suis malheureusement et que cette incohérence est inévitable, j'apprécierais beaucoup si quelqu'un pouvait suggérer un piratage ou une solution de contournement pour ce scénario de propriétés imbriquées. J'ai déjà essayé quelques idées, mais le tout avec un minimum de succès.

Remarque: Je me rends compte qu'un ORM peut bien résoudre mes problèmes, mais je crains que ce ne soit pas du tout réalisable pour le projet actuel sur lequel je travaille. Les ensembles de données ADO.NET simples devront faire.

Était-ce utile?

La solution

Selon Windows Presentation Foundation, illégal (Adam Nathan), vous pouvez lancer la vue par défaut dans un listcollectionView et définir une implémentation ICOMPARER personnalisée sur sa propriété CustomSort.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top