我有以下XAML:
<dxg:GridControl Name="theGrid" DataSource="{Binding Path=Groupings}">
<dxg:GridControl.ContextMenu>
<ContextMenu>
<MenuItem x:Name="gridprint" Command="{Binding Path=GridPrintCommand}"/>
</ContextMenu>
</dxg:GridControl.ContextMenu>
</dxg:GridControl>
当GridPrintCommand执行时,其GridPrintCommand.Execute(param)方法的参数为null。我想将参数设置为网格控件。我可以在代码隐藏中这样做:
gridprint.CommandParameter = theGrid;
这很好用。但是我试图在XAML中设置相同的东西(CommandParameter),而我却无法做到正确!我放的所有内容都会导致BindingExpressionError或null参数。我错过了什么?
答案 0 :(得分:8)
尝试使用:
<MenuItem x:Name="gridprint"
CommandParameter="{Binding PlacementTarget, RelativeSource=
{RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}" />
ContextMenus不是WPF的普通VisualTree的一部分,因此您必须使用PlacementTarget绑定以获取ContextMenu附加到的对象
答案 1 :(得分:0)
我相信应该是这个
<dxg:GridControl Name="theGrid" DataSource="{Binding Path=Groupings}">
<dxg:GridControl.ContextMenu>
<ContextMenu>
<MenuItem x:Name="gridprint"
Command="{Binding Path=GridPrintCommand}"
CommandParameter="{Binding ElementName=theGrid}"
/>
</ContextMenu>
</dxg:GridControl.ContextMenu>