Lorsque vous utilisez le DataGrid Silverlight avec une source de données dérivées IList il est possible de cliquer sur une colonne pour la trier, en supposant les CanUserSortColumns/propriétés CanUserSort ne sont pas fausses.Datagrid ne peut pas trier sur certains champs - objet, sous-champ d'objet, type de base
Cependant je trouve certains cas limites ne peuvent pas être triés par - les valeurs sont indiquées, mais en cliquant sur la colonne n'a pas d'effet.
Les premiers cas de pointe semblent être le List<string>
très simple, qui montre les valeurs, mais ne permet pas de tri. Cela n'a pas beaucoup de sens en tant qu'implications IComparable.
Le deuxième cas limite est beaucoup plus complexe, et peut-être besoin d'un travail autour. Le second cas concerne des champs et des sous-champs de type objet.
public class ContainerItem
{
public object ChildValue {get; set;}
// Other properties
}
La valeur de valeurEnfant peut être affiché dans la grille, et si le type attribué à valeurEnfant a des propriétés, nous pouvons également se lier à eux (valeurEnfant. Propriété), mais nous ne pouvons pas trier la colonne.
Il est évident que l'absence d'un type défini est un problème ici - il y aurait évidemment des problèmes si les objets où de différents types, incompatibles. Dans ma situation spécifique, je suis coincé avec ceci comme ChildValue est attribué dynamiquement, tout comme les définitions de liaison de colonne. Il semble évident que j'ai besoin d'un travail - j'ai le contrôle sur la définition de classe ContainerItem, et les liaisons aux propriétés de ChildValue sont toujours OneWay (seules les propriétés fixes de ContainerItem utilisent une liaison bidirectionnelle). Pourrais-je utiliser le SortMemberPath et le lier à une propriété tableau de ContainerItem, où chaque élément du tableau est un objet ContainerItemComparer rempli avec les informations de liaison de la colonne afin qu'il puisse extraire les valeurs des deux propriétés ChildValue , comparez-les et renvoyez le résultat sans que DataGrid sache que les propriétés sont des objets nus?