我想重复使用ContextMenu
几个DataGrid
。因此,我将上下文菜单放在的Resources
中Window
。
我有麻烦绑定到SelectedItem
的财产DataGrid
在其上ContextMenu
放置。
在此示例中,我试图在上下文菜单中显示的Name
属性SelectedItem
。
<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属性的ContextMenu对象的SelectedItem.Name(可以从菜单项绑定的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调试器中运行应用程序并在“输出”窗口(“调试”->“窗口”->“输出”)中观察输出,则可以发现这些错误。在输出窗口中,您应该查找System.Windows.Data Error行,在该行中,您将看到您要绑定的对象和属性的类型,这将为您提供XAML绑定有问题的线索。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句