c# - 如果使用路径,绑定(bind)不会刷新

标签 c# .net wpf xaml binding

在我的主窗口中,我有一个 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/

相关文章:

c# - 为什么不能在 C# 中声明静态结构,但它们可以有静态方法?

c# - 生成 .ADO.net 实体数据模型时,postgresql 未出现在数据源中

c# - 读取时是否需要 Flush() FileStream?

c# - 非常奇怪的 Application.ThreadException 行为

c# - 如何将具有前端 SPA 的 Azure CDN 和具有 .Net Core WebApi 的 Azure WebApp 配置到同一自定义域?

c# - DDD 项目的数据库优先模型中的复杂类型

c# - 使用 jQuery 使用 WCF 服务

c# - WPF SelectionChanged 为相同的值

c# - 如何格式化绑定(bind)的 wpf 数据网格文本列以不显示新的 DateTimes?

wpf - 对 ObservableCollection<T> 进行排序