开发者

Binding doesn't refresh if path used

开发者 https://www.devze.com 2023-02-19 00:56 出处:网络
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.

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

精彩评论

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

关注公众号