Как установить RelativeSource в DataTemplate, который вкладывается в HierarchicalDataTemplate?

У меня есть следующий XAML, который делает все, что он, как предполагается, за исключением того, что MultiBinding на FontSize перестал работать при получении Пользователей (я вижу DependencyProperty. UnsetData, когда я установил точку останова в преобразователе). Поскольку Вы видите, что Пользователи IEnumerable<UserData> это - часть DataContext HierarchicalDataTemplate.

Как я ссылаюсь на него??

<TreeView Name="AllGroups" ItemsSource="{Binding}" >
      <TreeView.Resources>
           <HierarchicalDataTemplate DataType="{x:Type PrivateMessengerUI:GroupContainer}"
                                     ItemsSource="{Binding Users}"
                                                  >
                  <Label Content="{Binding GroupName}"/>
            </HierarchicalDataTemplate>
            <DataTemplate DataType="{x:Type PrivateMessenger:UserData}">
               <TextBlock Text="{Binding Username}"
                          ToolTip="{StaticResource UserDataGroupBox}"
                          Name="GroupedUser"
                          MouseDown="GroupedUser_MouseDown">
                    <TextBlock.FontSize>
                         <MultiBinding Converter="{StaticResource LargeWhenIAmSelected}">
                               <Binding ElementName="Root" Path="SelectedUser"/>
                               <Binding RelativeSource="???"
                                        Path="DataContext.Users"/>
                         </MultiBinding>
                     </TextBlock.FontSize>
               </TextBlock>
           </DataTemplate>
         </TreeView.Resources>
      </TreeView>
5
задан Dabblernl 5 April 2010 в 15:23
поделиться

2 ответа

Правильный ответ:

<Binding RelativeSource="{RelativeSource FindAncestor,
                                         AncestorType={x:Type TreeViewItem},
                                         AncestorLevel=2}"
                           Path="DataContext.Users"/>

Уровень предков имеет решающее значение и вводит в заблуждение: когда вы его опускаете, предполагается уровень 1, который фактически указывает на контейнер DataTemplate (который тоже является бездетным TreeViewItem!), не контейнер HierarchicalDataTemplate.

6
ответ дан 14 December 2019 в 13:32
поделиться

Í нет доступа к среде IDE, чтобы опробовать ее (задержка ...), но я бы попробовал использовать режим FindAncestor, например:

RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type PrivateMessengerUI:GroupContainer}}

Это должно подняться по логическому дереву, чтобы найти группу контейнер.

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

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