将对象添加并插入到已排序的ObserverableCollection中

时间:2016-04-12 09:28:38

标签: c# wpf

我的WPF应用程序中有ObserverableCollection,我想根据属性对其进行排序。 考虑:

var MyCollection = new ObserverableCollection<MyViewModel>;

其中MyViewModel具有属性SortOrder,该属性返回表示其在集合中的位置的整数。对于每个对象,整数不必以1开头或递增1。

我可以在wpf Canvas上物理移动物体(如桌面上的文件夹和图标),SortOrder取决于位置。因此,当我移动一个对象时,我需要更新它在集合中的位置。

我还需要在集合中添加对象,那么我该怎样才能确保根据SortOrder对对象进行排序?

该集合通常包含1-30个项目。

1 个答案:

答案 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);
    }
}