При использовании 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 не будет знать, что свойства являются голыми объектами?