繁体   English   中英

WPF绑定中的父子关系

[英]WPF parent child relation in binding

我正在开发一个完全基于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 Command Binding时出现问题。 有人可以解释我在这里做错了什么。

ContextMenu在不同的视觉树上工作,因此无法像这样绑定它。 您需要找到ContextMenu祖先,并参考其PlacementTarget.DataContext来检索命令。 尝试这样的事情:

<MenuItem Header="Remove" Command="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ContextMenu}},Path=PlacementTarget.DataContext.RemoveSecurity}"/>

在ListView中放置一个Tag,以将其祖先连接到其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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM