WPF:如何绑定到name属性

时间:2011-03-21 11:05:29

标签: wpf binding

我可以绑定到name属性吗? 这似乎不起作用:

<TextBlock Name="FordPerfect" Text="{Binding Path=Name, Mode=OneWay}"/>

我做错了吗?

修改
添加ElementName=FordPerfect"解决了这个问题。我不明白的是,为什么只有Name的绑定需要这个,而其他属性则不需要。

注意:将第二个(设计)问题移至another question(我应该在第一次放置......)

由于

3 个答案:

答案 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已默认为单向,因为它仅为输出。

希望这有帮助!