c# - 数据绑定问题,未找到有效属性
问题描述
我正在尝试如下绑定数据模板中的属性
<DataTemplate x:Key="NMSString0x10DataTemplate">
<TextBlock Text="{Binding Value.Value}" MouseDown="Stringx10_MouseDown"/>
</DataTemplate>
但是它抛出了错误
`BindingExpression path error: 'Value' property not found on 'object' ''NMSString0x10' (HashCode=51713556)'. BindingExpression:Path=Value.Value; DataItem='MBINField' (HashCode=63604780); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
现在我知道 NMSString0x10 有一个名为 Value 的属性,我知道 MBINField(这里是数据上下文)也有一个名为 Value 的属性,它包含一个 NMSString0x10 的实例。
事实上,正如你所看到的,我有一个与代码隐藏相关的事件,它具有以下内容。
private void Stringx10_MouseDown(object sender, MouseButtonEventArgs e)
{
TextBlock tb = (sender as TextBlock);
MBINField field = (tb.DataContext as MBINField);
libMBIN.Models.Structs.NMSString0x10 c = field.Value as libMBIN.Models.Structs.NMSString0x10;
tb.Text = c.Value;
}
这很好用!
这显然是绑定的问题,但对于我的生活,我无法弄清楚出了什么问题。
编辑:
找到了一种打开跟踪的方法,并注意到可能是一个问题,但我不了解它,我害怕
System.Windows.Data Warning: 108 : BindingExpression (hash=28048521): At level 0 - for MBINField.Value found accessor ReflectPropertyDescriptor(Value)
System.Windows.Data Warning: 104 : BindingExpression (hash=28048521): Replace item at level 0 with MBINField (hash=51110099), using accessor ReflectPropertyDescriptor(Value)
System.Windows.Data Warning: 101 : BindingExpression (hash=28048521): GetValue at level 0 from MBINField (hash=51110099) using ReflectPropertyDescriptor(Value): NMSString0x10 (hash=46277382)
System.Windows.Data Warning: 108 : BindingExpression (hash=28048521): At level 1 - for NMSString0x10.Value found accessor <null>
这level 1 - for NMSString0x10.Value found accessor <null>
看起来像是一个可能的问题,虽然我不知道这意味着什么
编辑2:
我已经尝试按照下面的建议编写一个值转换器,不幸的是由于某种原因它从未真正使用过(断点从未命中,转换从未发生)我什至尝试将 MBINField 中的字段类型切换为动态而不是对象,但没有任何运气。
对我来说,后面的代码证明对象设置正确,它必须与绑定约定失败或类似的事情有关。
解决方案
我想写这篇评论,但我没有足够的代表。不确定,是否有帮助:
- 看来(我不确定,因为您没有发布源代码),您的 MBINField.Value 是 object 类型
- 没有 Value 属性
是什么让我这么想:
- 在您的跟踪中,在级别 0 上,找到了 MBINField.Value 的访问器
- 在级别 1 上,未找到访问器,即:MBINField.Value.Value 不存在
- 在您的错误消息中,它指出:在“对象”上找不到“值”属性
如果这个假设是正确的,一个可能的解决方案是将 MBINField.Value 的类型替换为具有属性 Value 的基类,并使 NMSString0x10 继承它。另一种解决方案是编写一个值转换器, 像这样
推荐阅读
- angularjs - 在选择标签内添加一个额外的按钮作为选项,以便单击该按钮会打开另一个对话框
- python - 如何使用 pycrate 对 Attach Request NAS 消息进行编码
- r - 在 sparklyr 中使用 semi_join 时出现匹配错误
- javascript - 如何检查角度 8 中的刷新页面事件并显示一个对话框,要求用户重新加载或取消操作
- php - SQL Query 在一个参数中给出错误的输出
- python - 从 yatra.Com 的日期选择器中选择日期
- java - 如何在 JAVA 中使用立陶宛语特殊字母
- unit-testing - 如何在 azure Devops 中安装 Cobertura?
- java - 如何从 Antlr4 语法在控制台上打印一些东西
- ignite - 当 Ignite 服务器上已经有配置时,在 Ignite 客户端上具有相同的配置