[英]Wp7 ListBox ItemSource ObservableCollection IndexOUtofRange and Items are not updated
我有以下問題:我正在創建一個 Windows Phone 7 應用程序,並且我正在使用一個綁定到 ObservableCollection 人的 ListBox。 你在下面看到這個的實現:
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 對象。 它們是在以下 function 中創建的... 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 事件被觸發時,我嘗試使用以下代碼重建整個列表(因此我再次調用上面的 function):
string id = people[listValues.SelectedIndex].Id;
MessageBox.Show(id);
CreateHierachy(id);
CreateHierachy 只查詢一個 WebService,然后進入上面的方法。 問題是,只要我 select 在 ListBox 中有一個值,我就會收到以下錯誤:
ArgumentOutOfRangeException {"\r\nParameter name: index"}
該錯誤是由行 listValues.SelectedIndex 引起的。 我完全不知道為什么會這樣。 我所知道的是 MessageBox 向我顯示了正確的 SelectedIndex 值。 我還知道,當我刪除 people.Clear() 行時,錯誤消失但 ListBox 沒有得到更新。
問題可能出在哪里?
謝謝!!!
再見,世嘉
您應該在此處檢查SelectedIndex
是否 >= 0:
if (listValues.SelectedIndex >= 0)
string id = people[listValues.SelectedIndex].Id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.