Windows phone 8 LayoutCycleDetection-Observablecollection插入两次

Windows phone 8 LayoutCycleDetection-Observablecollection插入两次,windows-phone-8,observablecollection,Windows Phone 8,Observablecollection,我有一个奇怪的例外。当使用特定索引将项插入到ObservableCollection中两次时,我会得到LayoutCycleeException 详细信息:我创建了一个Paging类,它处理一个大的ObservableCollection,最多可将2000个项目合并到一个页面中,即200个项目。然后,用户可以转到另一个页面。此事件导致寻呼机将页面项设置为新。除了一种情况外,所有工作正常:将新项目插入具有特定索引0、1、2、。。在第二次插入后激发异常 有人知道为什么吗 代码: 编辑解决方案 我在代

我有一个奇怪的例外。当使用特定索引将项插入到ObservableCollection中两次时,我会得到LayoutCycleeException

详细信息:我创建了一个Paging类,它处理一个大的ObservableCollection,最多可将2000个项目合并到一个页面中,即200个项目。然后,用户可以转到另一个页面。此事件导致寻呼机将页面项设置为新。除了一种情况外,所有工作正常:将新项目插入具有特定索引0、1、2、。。在第二次插入后激发异常

有人知道为什么吗

代码:

编辑解决方案

我在代码中发现了错误。问题是,UI没有时间更新集合。更改后的UI没有响应。非常奇怪的虫子,我花了很长时间才找到它


一个简单的Thread.Sleep10改变了整件事=在这一次,ui可以改变集合,一切正常。

异常不是来自ObservableCollection,而是来自插入项后更新布局时生成的事件

LayoutCycleDetection通常在使用LayoutUpdated事件处理程序时生成。您可能会无意中创建一个无限循环。在本例中,_pagedItems.Insert创建一个LayoutUpdate事件,该事件可能会再次调用_pagedItems进行插入


如果在那里找不到,您可能会有一个自定义控件调用LayoutUpdated并导致异常。

Hi。谢谢你的帮助。我在代码中发现了错误。我更新了我的question.Thread.Sleep10,它掩盖了一个更重要的问题。您应该发布使用_pagedItems的XAML部分,以便其他人可以找到合适的解决方案。
// 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);
    }
}