如何在ContextMenu中传递整个视图?

时间:2012-06-25 06:21:11

标签: xaml mvvm contextmenu commandparameter

我在数据网格上使用上下文菜单进行复制/粘贴。但是我没有在ContextMenu的Command Parameter中获取当前视图。在其他命令绑定中,我已将我的View名称作为Command参数传递,以获取当前视图状态。但是现在我被这个ContextMenu困住了,因为我无法通过它传递我的观点。我正在使用MVVM。

我的摘录

<DataGrid.ContextMenu>
     <ContextMenu x:Name="_menu">
           <MenuItem Header="Copy" Command="{Binding CopyCommand}" 
           CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}},Path=DataContext}" />
      </ContextMenu>
</DataGrid.ContextMenu>

2 个答案:

答案 0 :(得分:0)

最好的方式(在我看来)是将您的ViewModel声明为页面中的静态资源。然后,您可以将根面板的DataContext绑定到此静态资源(将您带到现在的位置)。这样可以使绑定工作在CommandParameter中(通过将参数绑定到StaticResource而非使用FindAncestor)。

你当前的Binding表达式无法工作的最可能的原因是你遇到了模板封装边界,但我不能确定没有看到所有的代码

答案 1 :(得分:0)

<DataGrid.ContextMenu>
     <ContextMenu x:Name="_menu">
           <MenuItem Header="Copy" Command="{Binding CopyCommand}" 
           CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}},Path=PlacementTarget.DataContext}" />
      </ContextMenu>
</DataGrid.ContextMenu>

我假设您的数据网格位于当前视图中