我正尝试如下绑定数据模板中的属性
<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的实例。
实际上,正如您所看到的,我有一个与codebehind相关的事件,其内容如下。
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中的字段类型切换为动态而不是没有运气的对象
对我来说,后面的代码证明了该对象的设置正确,这一定与绑定约定失败或遵循这些原则有关。
答案 0 :(得分:1)
我想在评论中写这个,但是我没有足够的代表。不确定是否有帮助:
是什么让我这样想:
如果此假设正确,则可能的解决方案是将MBINField.Value的类型替换为具有属性Value的基类,并使NMSString0x10继承它。另一种解决方案是编写一个值转换器like this