Datagrid не может сортировать по некоторым полям - объект, подполе объекта, базовый тип

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

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

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

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

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

   // Other properties
}

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

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

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

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


person David    schedule 01.12.2009    source источник


Ответы (1)


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

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

person Bryant    schedule 01.12.2009