0

我正在开发一个完全基于 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 命令绑定时,问题就来了。有人可以在这里解释我做错了什么。

4

2 回答 2

2

ContextMenu适用于不同的视觉树,因此不可能像那样绑定它。您需要找到ContextMenu祖先并参考它PlacementTarget.DataContext来检索您的命令。尝试这样的事情:

<MenuItem Header="Remove" Command="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ContextMenu}},Path=PlacementTarget.DataContext.RemoveSecurity}"/>
于 2013-07-02T12:43:38.973 回答
2

在 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>
于 2013-07-02T12:46:19.030 回答