2012-04-11 85 views
0

同樣的問題:WPF ContextMenu with ItemsSource - how to bind to Command in each item?綁定到文本菜單用的ItemSource

我試過如下實施,但沒有骰子。

目前在我的XAML:

  <DataGrid.ContextMenu> 
      <ContextMenu> 
       <MenuItem Header="Woooo" Command="{Binding ReassignFileCommand}" /> 
      </ContextMenu> 
     </DataGrid.ContextMenu> 

需要改變,以(解決方案):

<Setter Property="Command" Value="{Binding Path=DataContext.ReassignFileCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}" /> 

回答

1

的DataContext的,如果我用

<DataGrid.ContextMenu> 
      <ContextMenu ItemsSource="{Binding Users}"> 
       <ContextMenu.ItemTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Path=UID, Converter={StaticResource UserConverter}}"/> 
        </DataTemplate> 
       </ContextMenu.ItemTemplate> 
       <ContextMenu.ItemContainerStyle> 
        <Style TargetType="MenuItem"> 
         <Setter Property="Command" Value="{Binding ReassignFileCommand}" /> 
        </Style> 
       </ContextMenu.ItemContainerStyle> 
      </ContextMenu> 
     </DataGrid.ContextMenu> 

命令不工作MenuItem是Users集合中的相應對象,而不是用戶p的對象roperty是你的ContextMenu的DataContext。很可能你的命令是在ContextMenu的datacontext類中實現的,所以WPF找不到它。這種綁定錯誤可以在調試模式的輸出窗口中輕鬆找到(http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/30/debugging-data-bindings-in-a-wpf-or- Silverlight的application.aspx)

您可以通過movind您的命令解決這個問題,以用戶類或更改綁定指向正確的類(用的ElementName或的RelativeSource)

+0

你是正確的,但結合的datacontext文本菜單的我嘗試過: 也試過ContextMenu as x:類型 仍然得到: BindingExpression路徑錯誤:'Reas對象 ' '' 數據網格 '(名稱= 'ui_dtgAgreements')」 – 2012-04-11 22:12:51

+0

' 上沒有發現屬性' signFileCommand應當'值=「{結合DataContext.ReassignFileCommand,的RelativeSource = {的RelativeSource模式= FindAncestor,AncestorType = {X:類型數據網格},AncestorLevel = 1}}「' – Nikolay 2012-04-12 05:55:13