You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中能否用ObjectDataProvider填充DataGrid?绑定异常求助

问题排查与修复方案

嘿,我一眼就看到问题出在哪了——你的DataGrid本身的数据源绑定其实是没问题的,坑在DataGridTemplateColumn里的TextBox绑定逻辑上!

先理清楚:你的ListBox能正常工作,是因为它直接绑定到了ViewModel的TestList集合,数据上下文和绑定路径都对。但DataGrid里的TextBox绑定写偏了:

<TextBox Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}, Path=Name, Mode=OneWay}" IsReadOnly="True" />

这段代码是在找DataGrid控件的Name属性,但你根本没给DataGrid设置Name,所以显示空值;更重要的是,这完全不是你要的——你应该绑定到TestList里每一行对应的实体对象的属性,而不是控件本身的属性啊!

怎么改?

假设你的TestList里的每个数据项(比如叫TestItem类)有一个用来显示编辑器信息的属性,比如EditorName,那你只需要把TextBox的绑定改成:

<TextBox Text="{Binding EditorName, Mode=OneWay}" IsReadOnly="True" />

这样,每一行的TextBox就会自动取当前行数据项的EditorName值来显示了。

另外,再给你几个额外的检查点,以防万一:

  • 确认TestList是ObservableCollection<T>类型,而不是普通的List<T>——只有可观察集合才能在数据变化时自动通知UI更新;
  • 检查ViewModel的构造函数里有没有初始化TestList并填充数据;
  • 如果你的数据项属性需要动态更新,记得让TestItem类实现INotifyPropertyChanged接口。

要是还是有问题,你也可以把DataGrid的ItemsSource改成和ListBox完全一样的写法,先排除DataContext的影响:

<DataGrid ItemsSource="{Binding Source={StaticResource vmObjDataProv}, Path=TestList}" ...>

这样调整后,你的DataGrid应该就能正常显示数据啦!

内容的提问来源于stack exchange,提问作者Remco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:27:54