0

ObservableCollection에서 항목을 교환/이동하는 데 문제가 있습니다. 목록 상자에 항목 목록이 있습니다. 항목을 스 와이프하면 완료된 항목이되고 목록의 끝으로 이동합니다. 다음 번에는 위로 이동합니다. 예 : 3 개의 항목이있는 경우. 첫 번째 항목을 스 와이프하면 첫 번째 항목이 목록의 맨 아래로 이동하여 세 번째 항목이되고 두 번째 항목이 먼저 이동하고 세 번째 항목이 위로 이동하여 두 번째 항목이됩니다.System.NotSupportedException 'WP8에서 ObservableCollection 항목을 이동하는 중입니다.

이 내가 인스턴스

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에서 발생하지만, 위의 코드는 윈도우 8에서 마법처럼 일했다

사용자 코드에서 처리되지 않은 유형의 예외입니다 하지만 지금은 WP8에서 예외를 던졌습니다. 어떤 생각?

답변

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; 

// 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(); 


    } 
관련 문제