WPF, Связывающий родительское свойство в HierarchicalDataTemplate

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

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

с Ori как название propery

Даже таким образом это работы dosn't:

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

с tOri как название TextBlock в fisrt HierarchicalDataTemplate это связывает Ori propery.

Можно ли помочь мне?

5
задан qJake 24 June 2015 в 15:09
поделиться

2 ответа

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

Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}, AncestorLevel=2}, Path=DataContext.Ori}"
9
ответ дан 14 December 2019 в 01:00
поделиться

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

<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 WPF или Snoop .

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

0
ответ дан 14 December 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: