C# 使用排序列表进行数据绑定
我的UI有一个绑定到集合的列表框。现在这恰好是一个可观察的集合 我的目标是通过UI向该集合添加对象,并动态更新列表框,同时维护已排序的集合 我知道我可以在WPF中使用一些SortedView。但这不是我想要的——我需要实际集合保持排序,因为我的业务逻辑需要排序的集合 我想到的一种方法是创建自己的集合类,该类在内部使用SortedList,并实现INotifyCollectionChanged接口,并在内部列表更改时生成NotifyCollectionChangedEventArgs事件。听起来有很多工作要做C# 使用排序列表进行数据绑定,c#,wpf,data-binding,C#,Wpf,Data Binding,我的UI有一个绑定到集合的列表框。现在这恰好是一个可观察的集合 我的目标是通过UI向该集合添加对象,并动态更新列表框,同时维护已排序的集合 我知道我可以在WPF中使用一些SortedView。但这不是我想要的——我需要实际集合保持排序,因为我的业务逻辑需要排序的集合 我想到的一种方法是创建自己的集合类,该类在内部使用SortedList,并实现INotifyCollectionChanged接口,并在内部列表更改时生成NotifyCollectionChangedEventArgs事件。听起来有
是否有一个我错过的简单解决方案?好的,因此我最终继承了ObservaleCollection,并重写了Add方法。 这对我起了作用。现在我的列表总是被排序的,ObservableCollection是通知UI更改的集合
public class MyCollection : ObservableCollection<Int32>
{
public new void Add(Int32 x)
{
base.Add(x);
var oldList = new ObservableCollection<Int32>(this.OrderBy(c=>c));
Clear();
foreach(var i in oldList)
{
base.Add(i);
}
}
}
我是C语言的初学者,非常感谢对代码的任何反馈。根据您的具体需要,最简单的方法是保留ObservableCollection,但使用ICollectionView类型的新属性:
public class MyViewModel {
private CollectionViewSource _collectionViewSource;
public ICollectionView MyCollectionView => _collectionViewSource.View;
public MyViewModel(ObservableCollection<MyDataItem> dataItems) {
_collectionViewSource = new CollectionViewSource() { Items = dataItems };
//Add sorting here using _collectionViewSource.SortDescriptions.Add(...)
}
您可以根据需要使用wrapper属性来提取排序列表。这肯定是可行的,但对于大量数据,性能不会很好。当您为集合中的每个项目添加、清除和再次添加它们时,您将更新视图。