2011-03-23 7 views
2

私のMainWindowには、バインドごとにリストボックスに表示されるObservableCollectionがあります。パスが使用されているとバインディングがリフレッシュされない

私のコレクションを更新すると、リストにその変更が表示されます。

これは動作します:

public ObservableCollection<double> arr = new ObservableCollection<double>(); 

public MainWindow() 
{ 
      arr.Add(1.1); 
      arr.Add(2.2); 
      testlist.DataContext = arr; 
} 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    arr[0] += 1.0; 
} 
<ListBox Name="testlist" ItemsSource="{Binding}"></ListBox> 

このバージョンではありません動作します。

public ObservableCollection<double> arr = new ObservableCollection<double>(); 

public MainWindow() 
{ 
      arr.Add(1.1); 
      arr.Add(2.2); 
      testlist.DataContext = this; 
} 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    arr[0] += 1.0; 
} 
<ListBox Name="testlist" ItemsSource="{Binding Path=arr}"></ListBox> 

あなたはなぜ私に言うことはできますか? このをDataContextとして提供したいと思います。私のダイアログには他にも多くのプロパティが表示され、個々のコントロールごとにDataContextを設定する必要がない場合は便利です。

答えて

5

コレクションをプロパティとして公開する必要があります。今はフィールドです。だから、再びARRをプライベートにして追加します。

public ObservableCollection<double> Arr { 
    get { 
     return this.arr; 
    } 
} 

を次にあなたがthisが現在のDataContextであると仮定すると、{Binding Path=Arr}のように結合することができるようになります。

4

フィールドにはバインドできず、プロパティにのみバインドできます。プロパティでarrをラップしようとすると、正常に動作するはずです。

関連する問題