嗨我有一个ObservableCollection
我在哪里添加一个项目,我想对它进行排序。
我想在密钥上对其进行排序,例如:
collection.OrderByDescending(x => x.property)
我已经创建了一个扩展方法,它将在添加项目时进行排序(.Add
),但是,扩展方法需要执行类似上面的代码。使用下面的扩展方法中的代码,有人可以帮助我吗?
public static void Sort<T>(this ObservableCollection<T> collection) where T : IComparable
{
List<T> sorted = collection.OrderByDescending(x => x).ToList();
for (int i = 0; i < sorted.Count(); i++)
collection.Move(collection.IndexOf(sorted[i]), i);
}
通用真的需要实现IComparable
接口吗? (我对扩展方法很新。)
答案 0 :(得分:1)
通常情况下,当您使用ObservableCollection<T>
时,不要直接对其进行排序;相反,您对集合的视图应用排序(ICollectionView interface)。如果您将UI直接绑定到ObservableCollection<T>
,则可以应用如下排序:
var view = CollectionViewSource.GetDefaultView(collection);
view.SortDescriptions.Add(new SortDescription("MyProperty", ListSortDirection.Descending));
你只需要做一次;如果添加或删除项目,集合视图将自动重新排序。如果您更改MyProperty
的值,它也会有效,只要T
实现INotifyPropertyChanged
。
另请参阅:How to: Get the Default View of a Data Collection
(我假设您正在编写WPF应用程序;这种方法不适用于Windows Phone或Windows应用商店应用程序)
答案 1 :(得分:1)
这对我有用:
ConceptItems = new ObservableCollection<DataConcept>(ConceptItems.OrderBy(i => i.DateColumn));