0

我在尝试交换/移动 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.Windows.ni.dll 中出现“System.NotSupportedException”类型的异常,但未在用户代码中处理

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

4

1 回答 1

0

该控件绑定到一个列表框。我找到了解决办法。我不确定它是否是正确的方法。我创建了一个临时 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;

//编辑

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

        PageCollectionObservableCollection = tempPageCol;

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


   }  
于 2013-09-03T05:34:35.280 回答