我有一个需要按日期排序的项目列表,所以我正在做的是以下内容(我将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
,这导致的问题是,如果我有一个大集合,它会冻结用户界面直到集合更新。
我正在努力寻找更好的方法来做到这一点,任何人都可以告诉我这里最好的做法是什么?
答案 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);
}