Сетка данных не может сортировать по некоторым полям - объект, подполе объекта, базовый тип - PullRequest
0 голосов
/ 01 декабря 2009

При использовании Silverlight DataGrid с источником данных, полученным из IList, можно щелкнуть столбец для сортировки по нему, предполагая, что свойства CanUserSortColumns / CanUserSort не равны false.

Однако я нахожу, что некоторые крайние случаи не могут быть отсортированы - значения показаны, но нажатие на столбец не имеет никакого эффекта.

Первый крайний случай может показаться очень простым List<string>, который показывает значения, но не позволяет сортировку. Это не имеет особого смысла, поскольку строковые значения IComparable.

Второй крайний случай гораздо сложнее, и может потребоваться обходной путь. Во втором случае используются поля и подполя типа объекта.

public class ContainerItem
{       
   public object ChildValue {get; set;}

   // Other properties
}

Значение ChildValue может отображаться в сетке, и если тип, присвоенный ChildValue, имеет свойства, мы также можем связать их (ChildValue. Свойство ), но мы не можем отсортировать столбец.

Очевидно, что проблема заключается в отсутствии определенного типа - очевидно, будут проблемы, если объекты имеют разные несовместимые типы. В моей конкретной ситуации я застрял с этим, поскольку ChildValue назначается динамически, как и определения привязки столбцов.

Кажется очевидным, что мне нужно обойтись - у меня есть контроль над определением класса ContainerItem, и привязки к свойствам ChildValue всегда являются OneWay (только фиксированные свойства ContainerItem используют двустороннюю привязку).

Могу ли я, возможно, использовать SortMemberPath и связать его с некоторым свойством массива ContainerItem, где каждый элемент массива является объектом ContainerItemComparer, заполненным информацией о связывании столбца, чтобы он мог получить значения из двух свойств ChildValue, сравнить их и вернуть результат, если DataGrid не будет знать, что свойства являются голыми объектами?

1 Ответ

1 голос
/ 02 декабря 2009

Я думаю, что первый крайний случай довольно искусственный. Зачем вам связывать список строк с сеткой данных? Это, вероятно, не работает, потому что нет имени свойства для использования в качестве пути сортировки.

В случае динамической сортировки вам, вероятно, лучше реализовать ICollectionView в вашей коллекции. Затем вы можете управлять сортировкой вручную, однако вы хотите управлять ею, не пытаясь заставить ее работать из встроенной сортировки.

...