2011-03-08 63 views
2

我有以下XAML:如何在XAML中设置CommandParameter?

<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)方法为空。我想将参数设置为网格控件。我可以这样做在这样的代码隐藏:

gridprint.CommandParameter = theGrid; 

这工作正常。但是我试图在XAML中设置相同的东西(CommandParameter),而我却无法把它做好!我放的所有东西都会导致BindingExpressionError或null参数。我错过了什么?

回答

8

尝试使用这样的:

<MenuItem x:Name="gridprint" 
    CommandParameter="{Binding PlacementTarget, RelativeSource= 
     {RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}" /> 

ContextMenus不是WPF的正常的VisualTree的一部分,所以你必须使用PlacementTarget绑定获取ContextMenu附加到的对象

+0

非凡!谢谢。 – Matt 2011-03-09 09:16:29

+0

谢谢,经过三天的搜索,我发现** ContextMenus不是WPF正常VisualTree的一部分,因此您必须使用PlacementTarget进行绑定以获取ContextMenu附加到的对象** – ganchito55 2016-04-01 23:42:34

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> 

+0

如果我尝试这样做,我得到这个错误一团糟年龄:'System.Windows.Data错误:4:找不到与参考'ElementName = theGrid'绑定的源。 BindingExpression :(无路径);的DataItem = NULL;目标元素是'MenuItem'(Name ='gridprint');目标属性是'CommandParameter'(类型'Object')' – Matt 2011-03-08 17:21:15

+0

如果没有错误,则与ContextMeny和GridControl之间的命名空间有关。 – Marcote 2011-03-08 17:27:51