【问题标题】:Datagrid cannot sort on some fields - object, object subfield, base typeDatagrid 无法对某些字段进行排序 - 对象、对象子字段、基本类型
【发布时间】: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


    【解决方案1】:

    我认为第一个边缘案例是相当人为的。为什么要将字符串列表绑定到数据网格?它可能不起作用,因为没有属性名称可用作排序路径。

    对于动态排序的问题,您最好在您的集合中实现ICollectionView。然后你可以手动控制排序,但你想处理它,而不是试图强制它从内置排序中工作。

    【讨论】:

      猜你喜欢
      • 2017-07-15
      • 2011-05-03
      • 2011-05-16
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多