2012-03-01 149 views
0

我一直在努力過去3天刪除或覆蓋ListPicker值。我想要一個按鈕的點擊事件來刪除舊的列表項目,並用新的項目填充它。我使用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

你必須使用與您的內部元素的ObservableCollection,爲您ListPickerDataContext。事情是這樣的:

​​

而且之後就可以直接修改ObservableCollection。或者你可以使用:

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

但是你必須每次你改變你的List<>的內容時重置ItemSource

+0

感謝幫助我的人! – 2012-03-03 16:46:54