我的WPF应用程序中有ObserverableCollection
,我想根据属性对其进行排序。
考虑:
var MyCollection = new ObserverableCollection<MyViewModel>;
其中MyViewModel
具有属性SortOrder
,该属性返回表示其在集合中的位置的整数。对于每个对象,整数不必以1开头或递增1。
我可以在wpf Canvas上物理移动物体(如桌面上的文件夹和图标),SortOrder取决于位置。因此,当我移动一个对象时,我需要更新它在集合中的位置。
我还需要在集合中添加对象,那么我该怎样才能确保根据SortOrder
对对象进行排序?
该集合通常包含1-30个项目。
答案 0 :(得分:0)
借助this的灵感,你可以创建一个扩展名:
public static class Extensions
{
public static void Sort<TSource, TKey>(this ObservableCollection<TSource> collection, Func<TSource, TKey> keySelector)
{
List<TSource> sorted = collection.OrderBy(keySelector).ToList();
for (int i = 0; i < sorted.Count(); i++)
collection.Move(collection.IndexOf(sorted[i]), i);
}
public static void AddSort(this ObservableCollection<MyViewModel> collection, MyViewModel newItem)
{
var index = collection.Where(x => x.SortOrder) < newItem.SortOrder)).Count();
collection.Insert(index, newItem);
}
}