2011-03-08 46 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