从HierarchicalDataTemplate绑定到TreeView的DataContext

4

我有一个TreeView,其中包含由HierarchicalDataTemplate填充的项目。我正在尝试从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>
1个回答

2
您可以使用TextBlock标签引用TreeView的DataContext,然后通过相对源绑定使用PlacementTarget在ContextMenu中获取它,例如:
<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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接