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