I have the following 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>
When GridPrintCommand executes, its param开发者_如何学运维eter to the GridPrintCommand.Execute(param) method is null. I want to set the parameter to the grid control. I can do that in the code-behind like this:
gridprint.CommandParameter = theGrid;
This works fine. But I'm trying to set the same thing (CommandParameter) in the XAML, and I just can't get it right! Everything I put results in a BindingExpressionError or a null parameter. What am I missing?
Try using this:
<MenuItem x:Name="gridprint"
CommandParameter="{Binding PlacementTarget, RelativeSource=
{RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}" />
ContextMenus are not part of the WPF's normal VisualTree, so you have to bind using the PlacementTarget to get the object the ContextMenu is attached to
I believe it should be this
<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>
精彩评论