如何在XAML中设置CommandParameter?

时间:2011-03-08 17:09:20

标签: .net wpf xaml .net-4.0

我有以下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参数。我错过了什么?

2 个答案:

答案 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>