2

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 parameter 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?

John Saunders
  • 160,644
  • 26
  • 247
  • 397
Matt
  • 1,412
  • 3
  • 15
  • 18

2 Answers2

11

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

Rachel
  • 130,264
  • 66
  • 304
  • 490
  • Thanks, after three days searching I find that **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** – ganchito55 Apr 01 '16 at 23:42
0

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>

Austin Lamb
  • 3,116
  • 1
  • 22
  • 13
  • If I try that, I get this error message: `System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=theGrid'. BindingExpression:(no path); DataItem=null; target element is 'MenuItem' (Name='gridprint'); target property is 'CommandParameter' (type 'Object')` – Matt Mar 08 '11 at 17:21
  • if not mistaken, is something related to the namespaces between the ContextMeny and the GridControl. – Marcote Mar 08 '11 at 17:27