我在中存储了数千个MyClass对象BindingList<MyClass>。我想按日期属性对它们进行排序MyClass.dt。
BindingList类不支持直接排序。如何BindingList<T>不对所有对象进行重复复制?我需要按升序或降序对它们进行排序。
我不需要BindingList.Sort()中SortableBindingList描述的特殊类来表现像List.Sort()。我正在寻找一两行代码的简短解决方案。
Linq会工作。
var sortedListInstance = new BindingList<MyClass>(unsortedListInstance.OrderBy(x => x.dt).ToList());
Run Code Online (Sandbox Code Playgroud)
请记住,您会获得排序列表的浅表副本,而不是的重复实例MyClass。
不要忘记在代码文件的顶部包含名称空间 System.Linq
在 BindingList 上实现 Sort 的一种快速方法是使用将支持 IList< T >作为其参数的构造函数。您可以使用 aList<T>作为支持并获得其Sort功能。
根据文档
使用此 BindingList 创建一个由列表支持的 BindingList,以确保对列表的更改反映在 BindingList 中。
如果您的 MyClass 被定义为:
internal class MyClass
{
public MyClass(string name, Int32 num)
{
this.Name = name;
this.Num = num;
}
public string Name {get; set;}
public Int32 Num {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
那么你可以做这样的事情来在Num现场对其进行排序。
private List<MyClass> backing;
private BindingList<MyClass> bl;
private void InitializeBindingList()
{
backing = new List<MyClass>();
bl = new BindingList<MyClass>(backing);
bl.Add(new MyClass("a", 32));
bl.Add(new MyClass("b", 23));
bl.Add(new MyClass("c", 11));
bl.Add(new MyClass("d", 34));
bl.Add(new MyClass("e", 53));
}
private void SortBindingList()
{
backing.Sort((MyClass X, MyClass Y) => X.Num.CompareTo(Y.Num));
// tell the bindinglist to raise a list change event so that
// bound controls reflect the new item order
bl.ResetBindings();
}
}
Run Code Online (Sandbox Code Playgroud)
您需要在对后备列表进行排序后调用BindingList.ResetBindings方法以通知任何绑定控件BindingList已更改并更新控件。
| 归档时间: |
|
| 查看次数: |
13573 次 |
| 最近记录: |