强制BindingList进行排序

时间:2014-10-13 14:10:56

标签: c# .net

有没有办法强制BindingList排序(在单元测试中)?根据{{​​3}},方法ApplySortCore被标记为受保护,但必须有某种方式绑定控件引发调用,那不是吗?

我总是可以用反射来做,但如果有可接受的解决方案,我会尽量避免使用它。

2 个答案:

答案 0 :(得分:3)

如果您有自己的派生SortableBindingList,可以将其强制转换为IBindingList并执行:

((IBindingList)myList).ApplySort(prop, direction);

答案 1 :(得分:1)

正如您在该页面上提到的那样:

  

BindingList<T>类不提供基本实现   排序,因此ApplySortCore始终抛出NotSupportedException   默认。要启用排序,请从BindingList派生并执行   以下任务:

     
      
  • 覆盖ApplySortCore并实施排序,在排序完成时引发ListChanged事件。
  •   
  • 覆盖RemoveSortCore并实施排序删除。
  •   
  • 覆盖SupportsSortingCore并将SupportsSortingCore设置为true。
  •   
     

此外,您可能希望实施补充   SortDirectionCore和SortPropertyCore排序属性。

问题是BindingList<T>默认情况下不知道如何对T类型的对象进行排序,因为T可以是一个复杂的对象,没有明显的排序方法。此外,ApplySortCore应根据用户想要的属性进行排序,您需要解释如何执行此操作。

所以你需要派生一个SortableBindingList<T>,你可以在其中覆盖上述方法。