WPF Binding parent property in HierarchicalDataTemplate

一个人想着一个人 提交于 2019-11-28 04:24:32

问题


I have a WPF TreeView with 2 levels of data and 2 HierarchicalDataTemplate to format each level. From the HierarchicalDataTemplate at the second level, I need to bind a property in the class of the first level. I have tried in this way, but it dosn't work:

Text="{Binding Path=Ori, RelativeSource={RelativeSource TemplatedParent}}"

with Ori as the name of the propery

Even in this way it dosn't works:

Text="{Binding Path=tOri, RelativeSource={RelativeSource TemplatedParent}}"

with tOri as the name of the TextBlock in the fisrt HierarchicalDataTemplate that bind the Ori propery.

Can you help me?


回答1:


TemplatedParent only refers to the parent Control inside a ControlTemplate and so doesn't work with DataTemplates. You can use FindAncestor instead to locate the parent TreeViewItem and then access its DataContext.

Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}, AncestorLevel=2}, Path=DataContext.Ori}"



回答2:


You have misunderstood the TemplatedParent binding in WPF. TemplatedParent refers to the inherited control that you are extending. Example: if I wrote a ControlTemplate that targeted a Button.

<ControlTemplate TargetType="{x:Type Button}" x:Key="MyButtonTemplate">
   <Border BorderBrush="{TemplateBinding Property=Background}" BorderThickness="3" >
      <ContentPresenter Margin="10"/>
   </Border>
</ControlTemplate>

This is binding the BorderBrush to the the base Button.Background property.

To achieve what you want, you need to walk the visual tree using the RelativeSource FindAncestor to find the parent and then perform the binding. To help try using either Mole WPF or Snoop.

Note: the copy of Snoop available above has some serious issues, i.e., cannot go more than 256-levels deep. I have a patched and feature extended version that is awesome. A interchange between using Mole and Snoop2 to debug/visualise during development.



来源:https://stackoverflow.com/questions/3255365/wpf-binding-parent-property-in-hierarchicaldatatemplate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!