有没有办法强制BindingList排序(在单元测试中)?根据{{3}},方法ApplySortCore
被标记为受保护,但必须有某种方式绑定控件引发调用,那不是吗?
我总是可以用反射来做,但如果有可接受的解决方案,我会尽量避免使用它。
答案 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>
,你可以在其中覆盖上述方法。