如何解决WPF TreeViewItem Contextmenu命令绑定不起作用
我想为ContextMenu
创建一个TreeViewItem
,并传递一个参数作为TreeViewItem
数据上下文(而不是TreeView
数据上下文)。
我收到以下命令绑定错误。问题是什么?
我也尝试将TreeViewItem
,MenuItem
和ContextMenu
用作AncestorType
。
我也尝试将AncestorLevel
设置为1
,2
,3
,但是它并没有改变结果。
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor,AncestorType='System.Windows.Controls.TreeView',AncestorLevel='1''. BindingExpression:Path=DataContext.DeleteFolderCommand; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'Command' (type 'ICommand')
这是我的代码:
<TreeView ItemsSource="{Binding Folders}">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}"
BasedOn="{StaticResource {x:Type TreeViewItem}}">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="Sil"
Command="{Binding DataContext.DeleteFolderCommand,RelativeSource={RelativeSource AncestorType={x:Type TreeView},Mode=FindAncestor}}"
CommandParameter="{Binding }"></MenuItem>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
解决方法
ContextMenu
与其关联的控件不在同一视觉树中,因此RelativeSource
绑定无效。
将Tag
的{{1}}属性绑定到父TreeViewItem
的{{1}}。然后,您可以通过上下文菜单中的DataContext
属性访问此属性,该属性设置为相应的TreeView
。
PlacementTarget
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。