【问题标题】:Bind a subclass property to a GridViewColumn将子类属性绑定到 GridViewColumn
【发布时间】:2013-12-19 11:12:50
【问题描述】:

我正在尝试将子类属性绑定到 GridViewColumn。 我有一个母类 M1 和 3 个不同的子类 S1、S2 和 S3。 GridViewColumn 填充了 M1 类的对象。 我想在这个 GridViewColumn 的标题上绑定一个在 M1 中没有实现的 S2 的属性。

有人可以向我解释一下该怎么做吗?

编辑:

我有这条线:

<GridViewColumn DisplayMemberBinding="{Binding _s2Attr}" Header="desc" Width="100" />

GridView ItemsSource 填充了 M1 类的对象,但它们都是 S1、S2 或 S3。

【问题讨论】:

  • 如果数据上下文的类型是S3S1,而不是S2,该怎么办?
  • 如果它是错误的对象类型,你会得到类似这样的错误:System.Windows.Data Error: 40 : BindingExpression path error: 'SomeProperty' property not found on 'object' 'S3' (HashCode=3806203)'. BindingExpression:Path=SomeProperty; DataItem='S3' (HashCode=3806203); target element is 'TextBlock' (Name=''); target property is 'NoTarget' (type 'Object')

标签: c# .net wpf data-binding


【解决方案1】:

绑定不是强类型的,它们在运行时通过具体DataContext 对象上的反射来解决。只要您的实际DataContext 类是 S2,那么您就可以很好地绑定到它。

【讨论】:

  • 我的 ItemsSource 填充了 M1 类的对象,但它们都是 S1、S2 或 S3,所以绑定是否将其视为 M1 对象或它们真正继承的类?
  • 是的,它们是“真正的”(具体的)类。
  • 好的。感谢您提供信息,但您知道它为什么不显示任何内容吗?我检查了对象实例化是否设置了值并且它们是...
  • 检查输出窗口是否存在绑定错误,或使用Snoop 之类的工具查看运行时的DataContext。
  • 您还确定要绑定到属性吗?您添加的代码看起来像是在尝试绑定到带有 _ 前缀的字段?
猜你喜欢
  • 2017-09-14
  • 2011-07-06
  • 2021-12-05
  • 2015-03-14
  • 1970-01-01
  • 2015-05-07
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多