System.NotSupportedException' при опит за преместване на елемент от ObservableCollection в WP8

Имам проблеми при опитите да разменям/премествам елементи в ObservableCollection. Имам списък с елементи в списъчно поле, когато плъзнете елемент, той става завършен елемент и следователно се премества в края на списъка.. следващите пъти се измества нагоре.. напр.: ако има 3 елемента. когато прекараме пръст върху първия елемент, първият елемент се премества в края на списъка, което го прави трети елемент, вторият елемент се премества нагоре и става първи, а третият елемент се премества нагоре, за да стане 2-ри елемент.

Ето как съм декларирал екземпляра

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

и вътре в конструктора на класа, той се дефинира така, където PageCollection е класът, към който списъчната кутия е свързана с данни.

PageCollectionObservableCollection = new ObservableCollection<PageCollection>();

И докато се опитвам да плъзна върху елемент в 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;
            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