Удаление / перезапись элементов ListPicker - PullRequest
0 голосов
/ 01 марта 2012

Последние 3 дня я боролся с удалением или перезаписью значений ListPicker.Я хочу, чтобы событие нажатия кнопки удаляло старые элементы списка и заполняло его новыми.Я использую LINQ для анализа значений из файла XML.Проблема в том, что независимо от того, что я пытаюсь, я всегда получаю исключение, такое как «Операция не поддерживается в коллекции только для чтения»и т.д. Есть ли способ удалить все значения из 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 Ответ

1 голос
/ 02 марта 2012

Вы должны использовать ObservableCollection с вашими элементами внутри, как DataContext вашего ListPicker. Примерно так:

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<>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...