Wp7 ListBox ItemSource ObservableCollection IndexOUtofRange и элементы не обновляются - PullRequest
1 голос
/ 28 июня 2011

У меня следующая проблема: я создаю приложение для Windows Phone 7 и использую ListBox, который связан с людьми из ObservableCollection. Реализацию этого вы видите ниже:

public class Person
{
    private string _id { get; set; }
    private string _name { get; set; }


    public Person(string Id, string Name, string Title)
    {
        _id = Id;
        _name = Name;
    }

    public string Id
    {

        get { return _id; }

        set
        {

            _id = value;

            FirePropertyChangedEvent("Id");

        }
    }

    public string Name
    {

        get { return _name; }

        set
        {

            _name = value;

            FirePropertyChangedEvent("Name");

        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void FirePropertyChangedEvent(string propertyName)
    {

        if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

    }

}

Коллекция People заполнена объектами Person. Они создаются в следующей функции ... listValues ​​- это мой ListBox.

void svc_GetHierachyCompleted(object sender, HCMobileSvc.GetHierachyCompletedEventArgs e)
    {
        var data = e.Result.ToArray();
        listValues.ItemsSource = null;
        people.Clear();

        int i = 0;
        foreach(var item in data)
        {
            if (i == 0)
            {
                // Manager
                mgrField1.Text = item[1].ToString();
                mgrField2.Text = item[2].ToString();
                i++;
            }
            else
            {
                // Untergebenen hinzufügen
                people.Add(new Person(item[0].ToString(), item[1].ToString(), item[2].ToString()));
            }

        }

        // Update List
        listValues.ItemsSource = people;

    }

Теперь у меня есть DataTemplate с двумя текстовыми блоками, привязанными к свойствам Id и Name. Когда происходит событие SelectionChanged, я пытаюсь перестроить весь список (поэтому я снова вызываю функцию выше), используя следующий код:

            string id = people[listValues.SelectedIndex].Id;
        MessageBox.Show(id);
        CreateHierachy(id);

CreateHierachy только запрашивает WebService, который затем входит в метод выше. Проблема в том, что как только я выбираю значение в ListBox, я получаю следующую ошибку:

ArgumentOutOfRangeException {"\r\nParameter name: index"}

Ошибка вызвана строкой listValues.SelectedIndex. Я абсолютно не знаю, почему это происходит. Что я знаю, так это то, что MessageBox показывает мне правильное значение SelectedIndex. Я также знаю, что когда я удаляю строку people.Clear (), ошибка исчезает, но ListBox не обновляется.

Есть идеи, где может быть проблема?

Спасибо !!!

Bye, WorldSignia

1 Ответ

0 голосов
/ 28 июня 2011

Вы должны проверить здесь, чтобы SelectedIndex был> = 0:

if (listValues.SelectedIndex >= 0)
     string id = people[listValues.SelectedIndex].Id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...