Window资源中的ContextMenu,绑定到DataGrid属性

时间:2014-07-22 14:11:21

标签: c# wpf binding datagrid contextmenu

我想在多个ContextMenu上重复使用DataGrid。 所以我将上下文菜单放在Resources的{​​{1}}。

我无法绑定Window所放置的SelectedItem的{​​{1}}属性。

在此示例中,我尝试在上下文菜单中显示DataGrid的{​​{1}}属性。

ContextMenu

提前致谢

1 个答案:

答案 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中绑定有什么问题。