【发布时间】:2016-04-21 08:08:10
【问题描述】:
我有一个问题,这很无聊,我花了很多时间用最好的方式解决我的问题。
问题:我有两个 ObservableCollections。 (OCAux - 辅助 OC,OCMain - 主 OC 绑定 UI)
我有请求 http,5 个请求。对于每个对请求的响应,都将其添加到项目 OCAux,然后对项目进行排序。将此添加到订购到我的 OCMain 的每个项目之后,这会自动通知 UI(正在绑定)。问题是,当添加一个新项目时,这不是订购的,因为我订购的是 OCAux 的结果,即仅按请求订购请求。如果您在将项目添加到 OCMain 后订购该项目,它会闪烁。 我可以在每次添加项目时订购 OCMain,但会导致 UI 在添加项目时闪烁。
这被如下规避了,但在 UI 中仍然存在这些“闪烁”:
foreach (var item in OCMain)
{
OCAux.Add(item);
}
ObservableCollection<Movies> moviesSortedByDatetime= new ObservableCollection<Movies>
(OCAux.OrderByDescending(item=> item.DateTime));
OCMain.Clear();
foreach (var item in moviesSortedByDatetime)
{
if (!OCMain.Contains(item))
{
OCMain.Add(item);
}
}
有谁知道如何在 ObservableCollection 的正确位置插入项目?
提前致谢
【问题讨论】:
-
将其添加到 OCaux。然后订购它。使用 OCaux.indexOf(item) 获取添加项的索引。然后将其插入 OCMain。 OCMain.Insert(index,item);这是你想要的吗?
-
我在 CollectionViewSource 中进行排序,但我只知道 WPF。另一个技巧是返回一个您排序的 IEnumerable 并在枚举上调用 NotifyProperty 更改,但这并非在所有情况下都有效。很确定并且 ObservableCollection 没有 InsertAt。
标签: c# wpf win-universal-app observablecollection