我可以绑定到name属性吗? 这似乎不起作用:
<TextBlock Name="FordPerfect" Text="{Binding Path=Name, Mode=OneWay}"/>
我做错了吗?
修改:
添加ElementName=FordPerfect"
解决了这个问题。我不明白的是,为什么只有Name
的绑定需要这个,而其他属性则不需要。
注意:将第二个(设计)问题移至another question(我应该在第一次放置......)
由于
答案 0 :(得分:5)
我会试试这个:
<TextBlock Name="FordPerfect"
Text="{Binding ElementName=FordPerfect, Path=Name, Converter={StaticResource conv}, Mode=OneWay}"/>
这样,TextBlock将成为绑定的上下文。 如果它不起作用,请观察“输出”窗口,您应该找到绑定错误!
答案 1 :(得分:2)
你可以更容易地做到这一点:
<TextBlock Name="FordPerfect"
Text="{Binding Name, Converter={StaticResource conv}, Mode=OneWay, RelativeSource={RelativeSource Self}}"/>
至于为什么:文本框'DataContext不是TextBox本身自动的。因此绑定到Name
会尝试绑定到whateverObjectInDataContext.Name
。所以要么事先设置DataContext,如:
<TextBlock Name="FordPerfect" DataContext={Binding RelativeSource={RelativeSource Self}}
Text="{Binding Name, Converter={StaticResource conv}, Mode=OneWay}"/>
...或直接设置绑定源
答案 2 :(得分:0)
您遇到的问题是Binding
,默认情况下,使用其所用元素的DataContext
作为其来源。但是,您希望绑定源本身是TextBlock
元素。
WPF有一个名为RelativeSource
的类,顾名思义,它设置相对于绑定的源。您可以选择的关系之一是Self
,它可以完全按照您的要求进行操作:将绑定源设置为它所使用的元素。
以下是代码:
<TextBlock Name="FordPerfect" Text="{Binding Name, RelativeSource={RelativeSource Self}}" />
由于您已使用RelativeSource
设置了来源,因此无需指定ElementName
。您也不需要Mode=OneWay
因为TextBlock.TextProperty
已默认为单向,因为它仅为输出。
希望这有帮助!