C# 窗口资源中的ContextMenu,绑定到DataGrid属性
我想在几个C# 窗口资源中的ContextMenu,绑定到DataGrid属性,c#,wpf,binding,datagrid,contextmenu,C#,Wpf,Binding,Datagrid,Contextmenu,我想在几个DataGrid上重用ContextMenu。 因此,我将上下文菜单放在我的窗口的参考资料中 我无法绑定到放置有ContextMenu的DataGrid的SelectedItem属性 在本例中,我试图在上下文菜单中显示SelectedItem的Name属性 <Window.Resources> <ContextMenu x:Key="DgContextMenu" DataContext="{Binding Path=PlacementTarg
DataGrid
上重用ContextMenu
。
因此,我将上下文菜单放在我的窗口的参考资料中
我无法绑定到放置有ContextMenu
的DataGrid
的SelectedItem
属性
在本例中,我试图在上下文菜单中显示SelectedItem
的Name
属性
<Window.Resources>
<ContextMenu x:Key="DgContextMenu"
DataContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">
<MenuItem Header="{Binding SelectedItem.Name, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
</ContextMenu>
</Window.Resources>
<DataGrid ItemsSource="{Binding CollectionView}"
ContextMenu="{StaticResource DgContextMenu}"
Tag="{Binding DataContext, RelativeSource={RelativeSource Self}}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Name" Binding="{Binding Name}" />
</DataGrid.Columns>
</DataGrid>
提前感谢您编写示例的方式存在绑定错误,这就是您的上下文菜单无法工作的原因。您已将菜单项标题绑定到SelectedItem。没有SelectedItem属性的ContextMenu对象的名称(您可以从菜单项绑定的相对资源部分看出这一点)。其中一个可能的解决方案是通过PlacementTarget(而不是PlacementTarget.Tag)将ContextMenu的DataContext绑定到DataGrid。由于子项控制父项的“继承”数据上下文,您只需在菜单项绑定中指定路径即可。其外观如下:
<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调试器中运行应用程序并在输出窗口(调试->窗口->输出)中查看输出,那个么您可以找到这些错误。在输出窗口中,您应该查找System.Windows.Data错误行,在该行中,您将看到试图绑定的对象和属性的类型,这将为您提供XAML中绑定的错误提示