2012-03-01 5 views
0

ListPicker 값을 제거하거나 덮어 쓰는 데 지난 3 일 동안 고생했습니다. 단추의 클릭 이벤트로 이전 목록 항목을 제거하고 새 목록으로 채우기를 원합니다. LINQ를 사용하여 XML 파일의 값을 구문 분석합니다. 문제는 내가 무엇을 시도하든 항상 "읽기 전용 컬렉션에서 지원되지 않는 작업"과 같은 예외가 발생한다는 것입니다. ListPicker에서 모든 값을 제거하는 방법이 있습니까?ListPicker 항목 제거/덮어 쓰기

여기에 코드입니다 :

public partial class Visa : PhoneApplicationPage 
{ 
    List<Tiedot> vastausLista = new List<Tiedot>(); 
    XDocument lista = XDocument.Load("Faktat.xml"); 
    Random rand = new Random(); 
    int piste = 0; 
    int levelStart = 1; 
    string level = string.Empty; 


    // Constructor 
    public Visa() 
    { 
     InitializeComponent(); 
     tbPisteet.Text = string.Format("{0}/25", piste.ToString()); 
     level = string.Format("level{0}", levelStart.ToString()); 
    } 

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     if (levelStart <= 1) 
     { 
      var documents = 
         (from docs in lista.Descendants("Taso") 
          where docs.Attribute("id").Value == level 
          select new 
          { 
           Elain = docs.Elements("vaihtoehto") 
          }).ToList(); 

      foreach (var doc in documents) 
      { 
       foreach (var section in doc.Elain) 
       { 
        foreach (var item in section.Elements("vastaus")) 
        { 
         vastausLista.Add(new Tiedot { Elain = item.Value }); 
        } 
       } 
      } 

      vaihtoehtoLista.ItemsSource = vastausLista; 

      var kuvaKysymys = (from tiedot in lista.Descendants("Taso") 
           where tiedot.Attribute("id").Value == level 
           select new Tiedot 
           { 
            Kuva = (string)tiedot.Element("kuva").Value, 
            Question = (string)tiedot.Element("kysymys").Value 
           }).FirstOrDefault(); 

      BitmapImage kuvaKuva = new BitmapImage(); 
      kuvaKuva.UriSource = new Uri(kuvaKysymys.Kuva, UriKind.Relative); 
      image.Source = kuvaKuva; 

      tbQuestion.Text = kuvaKysymys.Question; 

     } 

     base.OnNavigatedTo(e); 
    } 



    private void vaihtoehtoLista_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 

     if (vaihtoehtoLista.SelectedIndex == 1) 
     { 
      Update(); 
     } 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     UpdateLevel(); 
    } 

    public void Update() 
    { 
      piste++; 
      tbPisteet.Text = string.Format("{0}/25", piste.ToString()); 
      MessageBox.Show("You're correct!!"); 

    } 

    public void RemoveOldLevel() 
    { 

     while (vastausLista.Count > 0) 
      vaihtoehtoLista.Items.Remove(vastausLista[0]); 
    } 

    public void UpdateLevel() 
    { 

     levelStart++; 
     level = string.Format("level{0}", levelStart.ToString()); 

     var documents = 
         (from docs in lista.Descendants("Taso") 
          where docs.Attribute("id").Value == level 
          select new 
          { 
           Elain = docs.Elements("vaihtoehto") 
          }).ToList(); 

     foreach (var doc in documents) 
     { 
      foreach (var section in doc.Elain) 
      { 
       foreach (var item in section.Elements("vastaus")) 
       { 
        vastausLista.Add(new Tiedot { Elain = item.Value }); 
       } 
      } 
     } 

     RemoveOldLevel(); 
     vaihtoehtoLista.ItemsSource = vastausLista; 

     var kuvaKysymys = (from tiedot in lista.Descendants("Taso") 
          where tiedot.Attribute("id").Value == level 
          select new Tiedot 
          { 
           Kuva = (string)tiedot.Element("kuva").Value, 
           Question = (string)tiedot.Element("kysymys").Value 
          }).FirstOrDefault(); 

     BitmapImage kuvaKuva = new BitmapImage(); 
     kuvaKuva.UriSource = new Uri(kuvaKysymys.Kuva, UriKind.Relative); 
     image.Source = kuvaKuva; 

     tbQuestion.Text = kuvaKysymys.Question; 
    } 

} 

답변

1

당신은 당신의 ListPickerDataContext로, 내부 사용자의 요소가 포함 된 ObservableCollection을 사용해야합니다. 이런 식으로 뭔가 :

ListPicker picker = new ListPicker(); 

ObservableCollection<Object> coll = your items inside; 
picker.DataContext = coll; 

그리고 직접 ObservableCollection을 수정할 수 있습니다 후. 또는 당신은 사용할 수 있습니다

ListPicker picker = new ListPicker(); 
picker.ItemsSource = List<> with your items; 

하지만 당신은 ItemSource 당신이 List<>의 내용을 변경할 때마다 다시 설정해야합니다.

+0

나를 도와 주신 고마워요! –

관련 문제