同样的问题:WPF ContextMenu with ItemsSource - how to bind to Command in each item?
我尝试按照以下方式实施,但没有骰子。
目前在我的XAML中有:
<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>
如果我使用命令,它会起作用:
<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}}}" />
答案 0 :(得分:1)
MenuItem的DataContext是来自Users集合的对应对象,而不是具有Users属性的对象,它是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)
您可以通过将命令移动到用户类或更改绑定以指向正确的类(通过使用ElementName或RelativeSource绑定到contextMenu的datacontext)来解决此问题。