如何将WPF绑定与RelativeSource一起使用?

时间:2020-03-05 18:59:07  来源:igfitidea点击:

如何在WPF绑定中使用" RelativeSource",以及不同的用例?

解决方案

回答

不要忘记TemplatedParent:

<Binding RelativeSource="{RelativeSource TemplatedParent}"/>

或者

{Binding RelativeSource={RelativeSource TemplatedParent}}

回答

如果要绑定到对象的另一个属性:

{Binding Path=PathToProperty, RelativeSource={RelativeSource Self}}

如果我们想获得祖先的财产:

{Binding Path=PathToProperty,
    RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}

如果要在模板化父对象上获取属性(因此可以在ControlTemplate中进行2种方式的绑定)

{Binding Path=PathToProperty, RelativeSource={RelativeSource TemplatedParent}}

或者更短(仅适用于OneWay绑定):

{TemplateBinding Path=PathToProperty}

回答

Binding RelativeSource={
    RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemType}
}
...

" RelativeSource"的默认属性是" Mode"属性。此处提供了一组完整的有效值(来自MSDN):

  • PreviousData允许我们在显示的数据项列表中绑定上一个数据项(不包含该数据项的控件)。
  • TemplatedParent引用模板(数据绑定元素存在于其中)所应用到的元素。这与设置TemplateBindingExtension相似,并且仅在Binding在模板内时适用。
  • Self指的是我们要在其上设置绑定的元素,并允许我们将该元素的一个属性绑定到同一元素上的另一个属性。
  • FindAncestor引用数据绑定元素的父链中的祖先。我们可以使用此方法绑定到特定类型或者其子类的祖先。如果要指定AncestorType和/或者AncestorLevel,则使用此模式。

回答

值得一提的是,对于那些在Silverlight思维上绊脚石的人:

Silverlight仅提供这些命令中的精简子集

回答

我刚刚发布了另一个解决方案,该解决方案用于访问Silverlight中对我有用的父元素的DataContext。它使用Binding ElementName