ObservableCollection键排序扩展方法

本文关键字:方法 扩展 排序 ObservableCollection | 更新日期: 2023-09-27 18:18:24

嗨,我有一个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接口吗?(我对扩展方法很陌生)

ObservableCollection键排序扩展方法

通常,当您使用ObservableCollection<T>时,您不会直接对其进行排序;相反,您可以对集合的视图(ICollectionView接口)应用排序。如果您将UI直接绑定到ObservableCollection<T>,您可以应用这样的排序:

var view = CollectionViewSource.GetDefaultView(collection);
view.SortDescriptions.Add(new SortDescription("MyProperty", ListSortDirection.Descending));

你只需要做一次;如果添加或删除项,集合视图将自动重新排序。如果您更改MyProperty的值,只要T实现了INotifyPropertyChanged,它也可以工作。

参见:如何:获取数据集合的默认视图

(我假设你正在编写一个WPF应用程序;此方法不适用于Windows Phone或Windows Store应用程序)

这是为我工作:

ConceptItems = new ObservableCollection<DataConcept>(ConceptItems.OrderBy(i => i.DateColumn));