【问题标题】:Binding doesn't refresh if path used如果使用路径,绑定不会刷新
【发布时间】:2011-03-23 14:55:15
【问题描述】:

在我的 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>

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

【问题讨论】:

    标签: c# .net wpf xaml binding


    【解决方案1】:

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

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

    然后你就可以像{Binding Path=Arr} 那样绑定,假设this 是当前的DataContext。

    【讨论】:

      【解决方案2】:

      您不能绑定到字段,只能绑定到属性。尝试将arr 包装在一个属性中,您应该会发现它工作正常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-29
        • 2023-03-16
        • 2018-06-04
        • 2018-12-06
        • 1970-01-01
        • 2013-10-21
        • 1970-01-01
        • 2014-02-01
        相关资源
        最近更新 更多