4

HierarchicalDataTemplate によって設定された項目を含む TreeView があります。HierarchicalDataTemplate 内から TreeView の DataContext のプロパティにアクセスしようとしています。誰か助けてくれませんか?HierarchicalDataTemplate で試したのは次のとおりです。

<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>
4

1 に答える 1

2

TextBlock の Tag を使用して TreeView の DataContext を参照できます。次に、を介した相対ソース バインディングを使用して ContextMenu 内で取得できます。次に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>
于 2011-06-22T00:56:14.590 に答える