Datagrid无法对某些字段进行排序 - 对象,对象子字段,基本类型

时间:2009-12-01 20:15:08

标签: silverlight sorting silverlight-3.0 datagrid

当将Silverlight DataGrid与IList派生数据源一起使用时,可以单击一列来对其进行排序,假设CanUserSortColumns / CanUserSort属性不为false。

但是我发现一些边缘情况无法排序 - 显示的值,但单击该列无效。

第一个边缘情况似乎是非常简单的List<string>,它显示了值,但不允许排序。这并不是很有意义,因为字符串的意思是IComparable。

第二个边缘情况要复杂得多,可能需要解决。第二种情况涉及对象类型的字段和子字段。

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

   // Other properties
}

ChildValue的值可以显示在网格中,如果分配给ChildValue的类型具有属性,我们也可以绑定它们(ChildValue。 Property ),但是我们无法对列进行排序。 / p>

很明显,缺少定义类型是一个问题 - 如果对象存在不同的,不兼容的类型,那么显然会出现问题。在我的特定情况下,我坚持使用它,因为动态分配了ChildValue,列绑定定义也是如此。

似乎很明显我需要一个解决方法 - 我确实可以控制ContainerItem类的定义,并且对ChildValue的属性的绑定总是OneWay(只有ContainerItem的固定属性使用双向绑定)。

我是否可以使用SortMemberPath并将其绑定到ContainerItem的某个数组属性,其中数组的每个元素都是一个ContainerItemComparer对象,其中填充了列的绑定信息,以便它可以从两个ChildValue属性中提取值,比较它们,并返回结果,而DataGrid不知道属性是裸对象吗?

1 个答案:

答案 0 :(得分:1)

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

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