Свойство родительского связывания WPF в HierarchicalDataTemplate - PullRequest
5 голосов
/ 15 июля 2010

У меня есть WPF TreeView с 2 уровнями данных и 2 HierarchicalDataTemplate для форматирования каждого уровня.Начиная с HierarchicalDataTemplate на втором уровне, мне нужно связать свойство в классе первого уровня.Я пытался таким образом, но это не сработало:

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

с Ori в качестве имени свойства

Даже в этом случае это не работает:

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

с tOri в качестве имени TextBlock в первом HierarchicalDataTemplate, который связывает владение Ori.

Вы можете мне помочь?

Ответы [ 2 ]

9 голосов
/ 15 июля 2010

TemplatedParent относится только к родительскому элементу управления внутри ControlTemplate и поэтому не работает с DataTemplates.Вместо этого вы можете использовать FindAncestor, чтобы найти родительский TreeViewItem и затем получить доступ к его DataContext.

Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}, AncestorLevel=2}, Path=DataContext.Ori}"
0 голосов
/ 15 июля 2010

Вы неправильно поняли привязку TemplatedParent в WPF. TemplatedParent относится к унаследованному контролю, который вы расширяете . Пример: если я написал ControlTemplate, нацеленный на Button.

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

Это связывает BorderBrush со свойством base Button.Background.

Чтобы достичь желаемого, вам нужно пройтись по визуальному дереву, используя RelativeSource FindAncestor, чтобы найти родителя, а затем выполнить привязку. Чтобы попытаться использовать Mole WPF или Snoop .

Примечание: имеющаяся выше копия Snoop имеет некоторые серьезные проблемы, то есть не может быть глубиной более 256 уровней. У меня есть исправленная и расширенная версия, которая потрясающая. Обмен между использованием Mole и Snoop2 для отладки / визуализации во время разработки.

...