12

通过名称进行绑定自引用与通过 RelativeSource 进行自引用之间有什么区别?

例如:

<!-- Self referential via name -->
<Window ...
    x:Name="This"
    DataContext="{Binding Path=Data, ElementName=This}"/>

相对

<!-- Self referential via RelativeSource -->
<Window ...
    x:Name="This"
    DataContext="{Binding Path=Data, RelativeSource={RelativeSource Self}}"/>

在我的项目中,它们的行为似乎相同,但我直接在窗口中使用它们。这意味着我立即更喜欢前者,因为它打字更少。

RelativeSource 的唯一优势是它能够在(例如)广泛使用的样式中进行自我引用吗?还是有一些额外的语义差异?

4

3 回答 3

8

警告:不是 WPF 向导

当您像示例中那样直接绑定到 WPF 元素时,没有区别。"This" 是可解析的,将绑定到与 Self 相同的项目。

我怀疑当您通过诸如 Style 之类的构造进行绑定时,区别就在于。在这种情况下,您真正​​想要绑定的是应用样式的元素。在这种情况下,RelativeSource Self 会给你那个元素,其中“this”只会给你一个 Style 实例。

于 2009-03-10T15:30:33.117 回答
2

如果您倾向于大量重构控件的名称,那么使用自引用形式可能更可取,否则我会说这是我会根据性能进行的调用。构建一个小测试,看看哪种类型的绑定性能更好,然后选择那个。如果性能差异可以忽略不计,那么我肯定会考虑其他可维护性考虑因素,例如整体外观和输入时间。也不要忘记,当使用自引用表单时,您不必命名元素,因此在比较鼠标和键盘之间的输入和上下文切换时,您必须包括 ElementName 表单的额外命名要求。

就个人而言,我更喜欢引用绑定形式,因为它可以更轻松地重构,并且在设置绑定时我不必在 XAML 文档中移动以添加元素名称。

于 2009-10-15T15:09:00.220 回答
-1

为什么您认为它们之间存在差异?我认为它们应该是相同的,因为它们是指同一元素的两种方式。

于 2009-03-10T15:21:04.997 回答