将项添加到已排序的observablecollection

时间:2014-07-12 12:29:04

标签: c# sorting observablecollection windows-phone-8.1 win-universal-app

我有一个需要按日期排序的项目列表,所以我正在做的是以下内容(我将ItemsControl绑定到Pushes

public ObservableCollection<Push> Pushes
        {
            get { return Settings.PushCol; }
            set { Settings.PushCol = value; OnPropertyChanged("Pushes"); }
        }


    Pushes = new ObservableCollection<Push>(
        Settings.PushCol
            .Where(push => push.Active == true)
            .OrderByDescending(push => push.Created)
    );

这里的问题是,如果我要添加到Pushes,我将不得不使用上面的代码求助Pushes,这导致的问题是,如果我有一个大集合,它会冻结用户界面直到集合更新。

我正在努力寻找更好的方法来做到这一点,任何人都可以告诉我这里最好的做法是什么?

1 个答案:

答案 0 :(得分:1)

首先,请不要将set个人列入您的清单。这样,您就可以控制项目添加到列表的方式。

有一些方法可以通过CollectionViewSource为ObservableCollection排序项目。您可以阅读here

另一种解决方案是将您的列表公开为IEnumerable<Push>

public IEnumerable<Push> Pushes // no Add method on IEnumerable
{
    get { return Settings.PushCol; }
}

然后在您的班级中实施Add方法,该方法控制项目的添加方式。

public void Add(Push p){
    int i = 0;
    for (; i < Settings.PushCol.Count; i++)
    {
        if (Settings.PushCol[i].Created > p.Created)
            break;
    }
    Settings.PushCol.Insert(i, p);
}