Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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# WPF DatGrid上下文菜单绑定_C#_Wpf_Xaml_Mvvm_Wpfdatagrid - Fatal编程技术网

C# WPF DatGrid上下文菜单绑定

C# WPF DatGrid上下文菜单绑定,c#,wpf,xaml,mvvm,wpfdatagrid,C#,Wpf,Xaml,Mvvm,Wpfdatagrid,我有一个WPF DataGrid,其DataContext绑定到一个可观察的视图模型集合 My DataGrid列分别绑定到集合中对象的不同属性,这样可以正确工作,在网格上显示集合中的对象 我想在这个网格上添加一个上下文菜单,将菜单项定义为视图模型上的另一个属性,该属性构成了整个可观察集合。这些菜单项是另一个可观察的菜单项集合。我知道这种方法可以工作,因为我在应用程序的另一部分的树视图上有类似的代码 我定义了DataGrid和ContextMenu的绑定,如下所示: <DataGrid

我有一个WPF DataGrid,其DataContext绑定到一个可观察的视图模型集合

My DataGrid列分别绑定到集合中对象的不同属性,这样可以正确工作,在网格上显示集合中的对象

我想在这个网格上添加一个上下文菜单,将菜单项定义为视图模型上的另一个属性,该属性构成了整个可观察集合。这些菜单项是另一个可观察的菜单项集合。我知道这种方法可以工作,因为我在应用程序的另一部分的树视图上有类似的代码

我定义了DataGrid和ContextMenu的绑定,如下所示:

 <DataGrid Name="SynchErrors" Grid.Row="1"
              Style="{StaticResource SortableGrid}"
              ItemsSource="{Binding}">
        <DataGrid.Resources>
            <userControls:BindingProxy x:Key="BindingProxy" DataContextProxy="{Binding}"  />

        </DataGrid.Resources>
        <DataGrid.ContextMenu>
             <ContextMenu DataContext="{Binding Path=DataContextProxy, Mode=TwoWay, Source={StaticResource BindingProxy}}"
            ItemsSource="{Binding Path=DataContextProxy.ContextMenuCommandList, Mode=TwoWay, Source={StaticResource BindingProxy}}">
                <ContextMenu.Resources>
                    <Style TargetType="{x:Type MenuItem}">
                        <Setter Property="Command" Value="{Binding ContextMenuCommand}"></Setter>
                        <Setter Property="Header" Value="{Binding DisplayName}"></Setter>
                    </Style>
                </ContextMenu.Resources>
            </ContextMenu>
        </DataGrid.ContextMenu>

        <DataGrid.Columns>
            <DataGridTextColumn Header="From"
                                MinWidth="120"
                                Width="*"
                                Binding="{Binding Path=Owner}"/>

            <DataGridTextColumn Header="Subject"
                                Width="2*"
                                Binding="{Binding Path=Name}"
                                SortMemberPath="Name"/>
       <DataGrid.Columns>
当我运行我的应用程序时,我会在网格中正确列出我的项目,但当我右键单击时,我会得到一个空的上下文菜单和以下绑定错误:

System.Windows.Data错误:40:BindingExpression路径错误:在“object”ObservableCollection“1”HashCode=53690177上找不到“ContextMenuCommandList”属性。BindingExpression:Path=DataContextProxy.ContextMenuCommandList;DataItem='BindingProxy'HashCode=43857660;目标元素是“ContextMenu”名称=;目标属性是“ItemsSource”类型“IEnumerable”

我使用BindingProxy将DataContext从DataGrid传递到ContextMenu,因为上下文菜单位于可视化树之外,但是这似乎传递的是整个集合,而不是绑定到每行的单个项

是否可以在DataGrid上定义上下文菜单的绑定以引用父集合的每个单独项?

是否可以尝试更改此设置 ItemsSource={Binding Path=DataContextProxy.ContextMenuCommandList 对此 ItemsSource={Binding Path=DataContextProxy/ContextMenuCommandList