System.NotSupportedException» при попытке переместить элемент ObservableCollection в WP8

У меня возникли проблемы с попыткой поменять местами/переместить элементы в 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. Есть идеи?


person alfah    schedule 12.08.2013    source источник


Ответы (1)


Элемент управления привязан к 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;

//РЕДАКТИРОВАТЬ

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

        PageCollectionObservableCollection = tempPageCol;

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


   }  
person alfah    schedule 03.09.2013