How do I set CommandParameter in XAML?

陌路散爱 提交于 2019-12-18 05:18:15

问题


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?


回答1:


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




回答2:


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>



来源:https://stackoverflow.com/questions/5235809/how-do-i-set-commandparameter-in-xaml

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!