我想在多个ContextMenu
上重复使用DataGrid
。
所以我将上下文菜单放在Resources
的{{1}}。
我无法绑定Window
所放置的SelectedItem
的{{1}}属性。
在此示例中,我尝试在上下文菜单中显示DataGrid
的{{1}}属性。
ContextMenu
提前致谢
答案 0 :(得分:2)
您编写示例的方式有绑定错误,这就是您的上下文菜单不起作用的原因。您已将绑定的菜单项标题绑定到ContextMenu对象的SelectedItem.Name,该对象没有SelectedItem属性(您可以从菜单项绑定的RelativeSource部分告诉它)。除其他外,一种可能的解决方案是通过PlacementTarget(而不是PlacementTarget.Tag)将ContextMenu的DataContext绑定到DataGrid。由于子控件“继承”父级的DataContext,您只需在菜单项绑定中指定Path即可。这就是它的样子:
<Window.Resources>
<ContextMenu x:Key="DgContextMenu"
DataContext="{Binding Path=PlacementTarget, RelativeSource={RelativeSource Self}}">
<MenuItem Header="{Binding Path=SelectedItem.Name}" />
</ContextMenu>
</Window.Resources>
<DataGrid ItemsSource="{Binding CollectionView}"
ContextMenu="{StaticResource DgContextMenu}"
>
</DataGrid>
如果在VS调试器中运行应用程序并在“输出”窗口中监视输出(Debug - &gt; Window - &gt; Output),基本上可以找到这些错误。在输出窗口中,您应该查找System.Windows.Data错误行,在该行中您将看到您尝试绑定的对象和属性的类型,这将为您提供线索在XAML中绑定有什么问题。