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