代码之家  ›  专栏  ›  技术社区  ›  Greg D

ElementName=“<Me>”和RelativeSource self之间的差异?

  •  12
  • Greg D  · 技术社区  · 16 年前

    通过名称进行绑定自引用与通过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的唯一优势是它能够以(例如)广泛使用的风格进行自我参照吗?还是有其他的语义差异?

    3 回复  |  直到 14 年前
        1
  •  8
  •   JaredPar    16 年前

    警告:不是WPF向导

    我的怀疑是,区别在于通过样式之类的构造进行绑定时。在这种情况下,实际要绑定的是应用样式的元素。在这种情况下,RelativeSourceSelf将为您提供该元素,“this”将为您提供样式实例。

        2
  •  2
  •   jpierson    15 年前

    就我个人而言,我更喜欢引用绑定形式,因为它有利于更容易的重构,并且在设置绑定时,我不必在XAML文档周围移动来添加元素名。

        3
  •  -1
  •   Andy    16 年前

    你为什么认为他们之间有区别?我认为它们应该是相同的,因为它们是指同一元素的两种方式。