Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 窗口资源中的ContextMenu,绑定到DataGrid属性_C#_Wpf_Binding_Datagrid_Contextmenu - Fatal编程技术网

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中绑定的错误提示