如果使用路径,则不会刷新绑定

时间:2011-03-23 14:55:16

标签: c# .net wpf xaml binding

在我的MainWindow中,我有一个ObservableCollection,它显示在每个绑定的列表框中。

如果我更新我的Collection,则修改会显示在列表中。

这有效:

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>
你能告诉我为什么吗? 我想将 this 作为DataContext,因为在我的对话框中还有很多其他属性要显示,如果我不必为每个单独的控件设置DataContext,那就太好了。

2 个答案:

答案 0 :(得分:5)

您需要将您的收藏作为属性公开,现在它是一个字段。所以再次将arr设为私有并添加:

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

然后,您将能够绑定{Binding Path=Arr},假设this是当前的DataContext。

答案 1 :(得分:4)

您无法绑定到字段,只能绑定到属性。尝试在属性中包装arr,你会发现它工作正常。