2011-06-28 32 views
1

私は次の問題があります.Windows Phone 7アプリケーションを作成していて、ObservableCollectionにバインドされているListBoxを使用しています。これは次のように実装されています。Wp7 ListBox ItemSource ObservableCollection IndexOutofRangeとItemsが更新されない

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)); 

    } 

} 

人物コレクションは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を持っており、2つのtextblocksがプロパティIdとNameの両方にバインドされています。 SelectionChangedイベントが発生したときに、私は次のコードを使用して(私は上記もう一度関数を呼び出す)、リスト全体を再構築しよう:

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

CreateHierachyはちょうどだけにして、上記の方法に入るWebサービスを照会します。

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

エラーがラインlistValues.SelectedIndexによって引き起こされる:問題は、私は、私は次のエラーを取得するリストボックスで値を選択するや否や、です。 なぜそれが起こるのか全く分かりません。私が知っているのは、MessageBoxが私に正しいSelectedIndex値を示しているということです。私も知っているのは、私が行のpeople.Clear()を削除するとエラーが消え去るが、ListBoxは更新されないということだ。

問題が発生している可能性のある候補はありますか?

ありがとうございました!

さようなら、 WorldSignia

+0

あなたのXAML –

答えて

0

あなたはSelectedIndexビーイング> = 0のためにここにチェックする必要があります:

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

グレートを投稿することができます。ありがとうございました :) –

関連する問題