4

我有一個TreeView,它包含由HierarchicalDataTemplate填充的項目。我正在嘗試從HierarchicalDataTemplate中獲取TreeView的DataContext中的屬性。有人可以幫忙嗎?以下是我在HierarchicalDataTemplate嘗試:從HierachicalDataTemplate綁定到TreeView的DataContext

<HierarchicalDataTemplate x:Key="MyTopLevel" 
            ItemTemplate="{StaticResource LowerLevelTemplate}" 
            ItemsSource="{Binding LowerLevel}"> 
    <TextBlock Text="{Binding Name, Mode=OneWay}" ToolTip="{Binding Name, Mode=OneWay}"> 
     <TextBlock.ContextMenu> 
      <ContextMenu x:Name="MyContextMenu">  
       <MenuItem Header="{Binding DataContext.Test, RelativeSource={RelativeSource AncestorType={x:Type TreeView}}}" /> 
      </ContextMenu> 
     </TextBlock.ContextMenu> 
    </TextBlock> 
</HierarchicalDataTemplate> 

回答

2

您可以使用TextBlock的標籤引用TreeView的DataContext的,那麼你就可以得到它的文本菜單中使用相對源通過PlacementTarget結合,例如:

<TextBlock Text="{Binding Name, Mode=OneWay}" Tag="{Binding DataContext, RelativeSource={RelativeSource AncestorType=TreeView}}"> 
    <TextBlock.ContextMenu> 
     <ContextMenu DataContext="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Self}}"> 
      <MenuItem Header="{Binding Test}"/> 
     </ContextMenu> 
    </TextBlock.ContextMenu> 
</TextBlock> 

如果您想保留上下文菜單中你可以使用完整路徑結合直接導航到性能,例如原來的DataContext:

<TextBlock Text="{Binding Name, Mode=OneWay}" Tag="{Binding DataContext, RelativeSource={RelativeSource AncestorType=TreeView}}"> 
    <TextBlock.ContextMenu> 
     <ContextMenu> 
      <MenuItem Header="{Binding PlacementTarget.Tag.Test, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/> 
     </ContextMenu> 
    </TextBlock.ContextMenu> 
</TextBlock>