如何解决从HierachicalDataTemplate绑定到TreeView的DataContext
|| 我有一个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>
解决方法
您可以使用TextBlock的Tag来引用TreeView的DataContext,然后可以使用相对的源绑定(通过ѭ1)在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,RelativeSource={RelativeSource AncestorType=TreeView}}\">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header=\"{Binding PlacementTarget.Tag.Test,RelativeSource={RelativeSource AncestorType=ContextMenu}}\"/>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。