【发布时间】:2014-05-21 11:51:48
【问题描述】:
我有一个奇怪的例外。将具有特定索引的项目两次插入 ObservableCollection 时,我得到一个“LayoutCycleException”。
详细信息:我创建了一个 Paging-Class,它将一个大的 ObservableCollection(最多 2000 个项目)处理成一个页面(200 个项目)。然后用户可以转到另一个页面。此事件导致寻呼机将页面项目设置为新的。除一种情况外,一切正常:将新项目插入具有特定索引 (0, 1, 2, ..) 的页面中会在第二次插入后触发异常。
有人知道为什么吗?
代码:
// Calculate the index for this page
var cp = (CurrentPage == 0) ? 1 : CurrentPage;
int pindex = index - ((cp - 1) * PageItemCount);
if (pindex >= 0 && pindex < PageItemCount)
{
// An item is inserted after the list is already loaded
if (pindex == 0)
{
// Check if the page has mor items than it should
if (_pagedItems.Count >= PageItemCount)
{
// Remove last item from page
_pagedItems.RemoveAt(_pagedItems.Count - 1);
}
_pagedItems.Insert(pindex, item);
}
else if (_pagedItems.Count < PageItemCount)
{
// --> EXCEPTION at third insert
_pagedItems.Insert(pindex, item);
}
}
编辑(解决方案)
我在我的代码中发现了错误。问题是,UI 没有时间更新更改的集合(UI 没有响应)。很奇怪的bug,找了好久……
一个简单的 Thread.Sleep(10) 改变了整个事情 =) 在这个时候 ui 可以改变集合并且一切正常。
【问题讨论】:
标签: windows-phone-8 observablecollection