开发者

Binding doesn't refresh if path used

In my MainWindow I have an ObservableCollection which is shown in a Listbox per Binding.

If I update my Collection the modification is shown in the list.

This works:

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>

This version works not:

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>

Can you tell me why? I would like to give this as the DataContext, because there are many other properties to s开发者_JAVA技巧how in my dialog and it would be nice if I wouldn't have to set the DataContext for every individual control.


You need to expose your collection as a property, right now it's a field. So make arr private again and add:

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

Then you will be able to bind like {Binding Path=Arr}, assuming this is the current DataContext.


You can't bind to a field, only to a property. Try wrapping arr in a property and you should find it works fine.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜