System.NotSupportedException'在尝试在WP8中移动ObservableCollection项时

时间:2013-08-12 07:58:03

标签: windows-phone-8 observablecollection notsupportedexception

我在尝试在ObservableCollection中交换/移动项目时遇到了麻烦。我有一个列表框中的项目列表,当您刷一个项目时,它变成一个已完成的项目,因此移动到列表的末尾..随后的时间,向上移动..例如:如果有3个项目。当我们在第一个项目上滑动时,第一个项目移动到列表的底部,使其成为第三个项目,第二个项目向上移动成为第一个,第三个项目向上移动成为第二个项目。

这是我声明实例的方式

private ObservableCollection<PageCollection> PageCollectionObservableCollection { get; set; } 

并且在类的构造函数中,它被定义为这样,其中PageCollection是列表框数据绑定的类。

PageCollectionObservableCollection = new ObservableCollection<PageCollection>();

当我尝试滑动数据绑定的列表框中的项目时,会执行以下代码。

       PageCollection completedItem = fe.DataContext as PageCollection;
       int fileNoCompleted = completedItem.FileNo;
       if (completedItem.CompletionStatus == false)
       {
            int position = 0;

            for (int i = PageCollectionObservableCollection.Count - 1; i > -1; i--)
            {
                if (PageCollectionObservableCollection.ElementAt(i).CompletionStatus == false)
                {
                    position = i;
                    break;
                }
            }
            completedItem.CompletionStatus = true;
            completedItem.Color = Colors.Green;
            completionStatusArray[fileNoCompleted] = true;
            PageCollectionObservableCollection.Move(fileNoCompleted, position); // ERROR
       }  

当执行到达PageCollectionObservableCollection.Move时,抛出以下错误。

  

发生了'System.NotSupportedException'类型的异常   System.Windows.ni.dll但未在用户代码中处理

上面的代码就像Windows 8中的魅力一样,但现在它在WP8中引发了异常。任何想法?

1 个答案:

答案 0 :(得分:0)

控件绑定到Listbox。我找到了一个解决方法。我不确定它是否是正确的方法。我创建了一个临时OC,执行了移动功能,然后将其重新分配给旧的OC。然后更新了ListBox。

   PageCollection completedItem = fe.DataContext as PageCollection;
   int fileNoCompleted = completedItem.FileNo;
   if (completedItem.CompletionStatus == false)
   {
        int position = 0;

        for (int i = PageCollectionObservableCollection.Count - 1; i > -1; i--)
        {
            if (PageCollectionObservableCollection.ElementAt(i).CompletionStatus == false)
            {
                position = i;
                break;
            }
        }
        completedItem.CompletionStatus = true;
        completedItem.Color = Colors.Green;
        completionStatusArray[fileNoCompleted] = true;

// EDIT

    List<PageCollection> l = PageCollectionObservableCollection.ToList<PageCollection>();
        ObservableCollection<PageCollection> tempPageCol = new ObservableCollection<PageCollection>(l);
        tempPageCol.Move(fileNoCompleted, position);

        PageCollectionObservableCollection = tempPageCol;

        CategoryLB.ItemsSource = PageCollectionObservableCollection;
        CategoryLB.UpdateLayout();


   }