WPF DatGrid上下文菜单绑定
本文关键字:绑定 菜单 上下文 DatGrid WPF | 更新日期: 2023-09-27 18:05:50
我有一个WPF DataGrid与DataContext绑定到视图模型的Observable集合。
我的DataGrid列每个都绑定到集合中对象的不同属性,这可以正确工作,在网格上显示集合中的对象。
我想在这个网格上添加一个上下文菜单,菜单项被定义为视图模型上的另一个属性,构成了整个可观察集合。这些菜单项是菜单项的另一个Observable集合。我知道这种方法可以工作,因为我在应用程序的另一部分的树视图上有类似的代码。
我已经定义了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。数据错误:40:BindingExpression路径错误:'ContextMenuCommandList'属性未在'对象'' 'ObservableCollection ' 1' (HashCode=53690177)'上找到。BindingExpression:路径= DataContextProxy.ContextMenuCommandList;DataItem = ' BindingProxy ' (HashCode = 43857660);目标元素是'ContextMenu' (Name= ");目标属性为"ItemsSource"(类型为"IEnumerable")
我已经使用BindingProxy将DataContext从DataGrid传递到ContextMenu,因为上下文菜单在Visual Tree之外,但是这似乎传递了整个集合,而不是绑定到每行的单个项目。
是否有可能在DataGrid上定义上下文菜单的绑定以引用父集合的每个单独项?你能试着改变一下吗= DataContextProxy ItemsSource = "{绑定路径。ContextMenuCommandList这个ItemsSource = "{绑定路径= DataContextProxy/ContextMenuCommandList