6

我有一个 WPFTreeView有 2 级数据和 2HierarchicalDataTemplate级来格式化每个级别。从HierarchicalDataTemplate第二级开始,我需要在第一级的类中绑定一个属性。我已经尝试过这种方式,但它不起作用:

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

Ori作为属性的名称

即使以这种方式它也不起作用:

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

withtOri作为绑定属性的TextBlock第一个名称。HierarchicalDataTemplateOri

你能帮助我吗?

4

2 回答 2

10

TemplatedParent 仅指 ControlTemplate 内的父控件,因此不适用于 DataTemplates。您可以改用 FindAncestor 来定位父 TreeViewItem,然后访问其 DataContext。

Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}, AncestorLevel=2}, Path=DataContext.Ori}"
于 2010-07-15T12:52:09.300 回答
0

您误解了TemplatedParentWPF 中的绑定。TemplatedParent指您正在扩展的继承控件。示例:如果我写了一个ControlTemplate针对 a 的Button.

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

这是绑定BorderBrush到基础Button.Background属性。

要实现您想要的,您需要使用 遍历可视化树RelativeSource FindAncestor以找到父级,然后执行绑定。帮助尝试使用Mole WPFSnoop

注意:上面可用的 Snoop 副本有一些严重的问题,即深度不能超过 256 级。我有一个很棒的补丁和功能扩展版本。在开发过程中使用 Mole 和 Snoop2 进行调试/可视化之间的互换。

于 2010-07-15T13:03:15.447 回答