4

私は、HierarchicalDataTemplateによって設定されたアイテムを含むTreeViewを持っています。私は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

あなたは、あなたがPlacementTargetを介して、例えば結合の相対ソースを使用したContextMenu内のそれを得ることができ、ツリービューのDataContextのを参照するためのTextBlockのタグを使用することができます。

<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> 
関連する問題