【发布时间】:2010-12-22 03:57:48
【问题描述】:
当使用具有 IList 派生数据源的 Silverlight DataGrid 时,可以单击列以按其排序,假设 CanUserSortColumns/CanUserSort 属性不为假。
但是我发现某些边缘情况无法排序 - 显示了值,但单击该列没有效果。
第一个边缘情况似乎是非常简单的List<string>,它显示了值,但不允许排序。这没有多大意义,因为字符串暗示了 IComparable。
第二种边缘情况要复杂得多,可能需要解决。第二种情况涉及对象类型的字段和子字段。
public class ContainerItem
{
public object ChildValue {get; set;}
// Other properties
}
ChildValue 的值可以显示在网格中,如果分配给 ChildValue 的类型有属性我们也可以绑定到它们(ChildValue.Property),但是我们不能对列进行排序。
很明显,缺少定义的类型是一个问题——如果对象具有不同的、不兼容的类型,显然会出现问题。在我的具体情况下,我坚持这一点,因为 ChildValue 是动态分配的,列绑定定义也是如此。
很明显,我需要解决问题 - 我确实可以控制 ContainerItem 类定义,并且 ChildValue 属性的绑定始终是 OneWay(只有 ContainerItem 的固定属性使用双向绑定)。
我是否可以使用 SortMemberPath 并将其绑定到 ContainerItem 的某个数组属性,其中数组的每个元素都是一个 ContainerItemComparer 对象,其中填充了列的绑定信息,以便它可以从两个 ChildValue 属性中提取值,比较它们,并在 DataGrid 不知道属性是裸对象的情况下返回结果?
【问题讨论】:
标签: silverlight sorting silverlight-3.0 datagrid