在我的主窗口中,我有一个 ObservableCollection,它显示在每个绑定(bind)的列表框中。
如果我更新我的收藏集,修改会显示在列表中。
这个有效:
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 就好了。
最佳答案
您需要将您的集合公开为一个属性,现在它是一个字段。所以再次将 arr 设为私有(private)并添加:
public ObservableCollection<double> Arr {
get {
return this.arr;
}
}
然后您将能够像 {Binding Path=Arr}
一样进行绑定(bind),假设 this
是当前的 DataContext。
关于c# - 如果使用路径,绑定(bind)不会刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5407137/