WPF相对源绑定(Self)

4

我对于何时使用 {RelativeSource Self} 进行绑定感到困惑。以下三种绑定看起来对我来说都是一样的,其中 MyText 是我视图模型中的属性。

<TextBlock Text = "{Binding Path=MyText RelativeSource{RelativeSource Self} }" />
<TextBlock Text = "{Binding MyText RelativeSource{RelativeSource Self} }" />
<TextBlock Text = "{Binding MyText }" />

什么时候应该在绑定中使用Self?谢谢。
1个回答

3
第一和第二种方式是等价的,它们都将绑定到元素本身的属性上。但是,它们当然不起作用,因为元素上没有属性。
第三种方式将绑定到当前的属性上。
当需要绑定到当前控件的属性时,请使用。

感谢澄清。如果没有指定,TextBlock的DataContext应该与其父级相同吗? - Helic
@Helic,是的。除非明确替换,否则DataContext的值会被子元素继承。 - Thomas Levesque
如果我定义一个控件模板来替换控件的默认显示模板,那么TextBlock的数据上下文是什么?dxe:ComboBoxEdit.DisplayTemplate <ControlTemplate> <TextBlock Text="{Binding RowData.Row.Cities3, Converter={StaticResource TestConverter}}"></TextBlock> </ControlTemplate> </dxe:ComboBoxEdit.DisplayTemplate> - Helic
@Helic,这取决于控件在哪里实例化。控件模板对此没有任何改变。但是无论如何,在大多数情况下,控件模板都不应该尝试使用DataContext。这就是DataTemplates的作用。 - Thomas Levesque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接