C# Wp7列表框项目源ObservableCollection IndexOutfrance和项目未更新

C# Wp7列表框项目源ObservableCollection IndexOutfrance和项目未更新,c#,windows-phone-7,listbox,observablecollection,itemsource,C#,Windows Phone 7,Listbox,Observablecollection,Itemsource,我有以下问题:我正在创建一个WindowsPhone7应用程序,我正在使用一个绑定到ObservableCollection的列表框。您可以在下面看到此功能的实现: public class Person { private string _id { get; set; } private string _name { get; set; } public Person(string Id, string Name, string Title) {

我有以下问题:我正在创建一个WindowsPhone7应用程序,我正在使用一个绑定到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));

    }

}
人员集合中充满了人员对象。它们是在以下函数中创建的。。。listValues是我的列表框

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和名称的文本块。触发SelectionChanged事件时,我尝试重新生成整个列表,因此我使用以下代码再次调用上述函数:

            string id = people[listValues.SelectedIndex].Id;
        MessageBox.Show(id);
        CreateHierachy(id);
createHierarchy只查询一个WebService,然后它进入上面的方法。问题是,只要在列表框中选择一个值,就会出现以下错误:

ArgumentOutOfRangeException {"\r\nParameter name: index"}
该错误是由行listValues.SelectedIndex引起的。 我完全不知道为什么会这样。我所知道的是MessageBox向我显示了正确的SelectedIndex值。我还知道,当我删除行people.Clear时,错误会消失,但列表框不会更新

你知道问题出在哪里吗

谢谢

再见, WorldSignia

您应该在此处检查SelectedIndex是否>=0:

if (listValues.SelectedIndex >= 0)
     string id = people[listValues.SelectedIndex].Id;