绑定中的WPF父子关系
本文关键字:父子关系 WPF 绑定 | 更新日期: 2023-09-27 18:20:39
我正在开发一个完全基于MVVM的应用程序。我面临着一个约束性的问题。
<ListView ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},Path=DataContext.CurrentSecurityList}">
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="Remove" Command="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type UserControl}},Path=DataContext.RemoveSecurity}"/>
</ContextMenu>
</ListView.ContextMenu>
ListView绑定在这段代码中运行得非常好,但当涉及到MenuItem命令绑定时,问题就来了。有人能解释一下我在这里做错了什么吗。
在ListView中放置一个标记,将其祖先连接到其ContextMenu:
<ListView ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},Path=DataContext.CurrentSecurityList}"
Tag="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}">
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="Remove" Command="{Binding PlacementTarget.Tag.DataContext.RemoveSecurity, RelativeSource={RelativeSource
AncestorType=ContextMenu}}"/>
</ContextMenu>
</ListView.ContextMenu>
</ListView>
ContextMenu
在不同的可视化树上工作,因此不可能像那样绑定它。您需要找到ContextMenu
祖先并引用其PlacementTarget.DataContext
来检索您的命令。试试这样的东西:
<MenuItem Header="Remove" Command="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ContextMenu}},Path=PlacementTarget.DataContext.RemoveSecurity}"/>