在我的XAML文件中,我有一个带有上下文菜单的DataGrid。数据源是一个ViewModel,它有一个名为EntityCollection
(一个ObservableCollection)的属性作为DataGrid的ItemsSource,另外还有一个集合ContextMenu.MenuItems
,它用作创建DataGrid上上下文菜单的数据源。该集合的元素具有绑定到命令属性的菜单项的Command
属性:
<DataGrid Name="EntityDataGrid" ItemsSource="{Binding EntityCollection}" Height="450">
<DataGrid.ContextMenu>
<ContextMenu ItemsSource="{Binding Path=ContextMenu.MenuItems}">
<ContextMenu.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Command" Value="{Binding Command}" />
<Setter Property="CommandParameter"
Value="{Binding ElementName=EntityDataGrid, Path=SelectedItems}" />
</Style>
</ContextMenu.ItemContainerStyle>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
在ViewModel中,菜单项命令的操作具有以下签名:
private void SelectedItemsAction(object parameter)
{
// Do something with "parameter"
}
现在我的问题是,当我点击上下文菜单项时,我会进入SelectedItemsAction
,但parameter
为空。我相信我的问题在于CommandParameter
属性的设置器中。正如你所看到的,我想通过将值设置为DataGrid的SelectedItems
属性来绑定此属性:
<Setter Property="CommandParameter"
Value="{Binding ElementName=EntityDataGrid, Path=SelectedItems}" />
我尝试了一些简单的值来进行测试:
<Setter Property="CommandParameter"
Value="{Binding ElementName=EntityDataGrid, Path=Height}" />
这里的parameter
仍然是null
。现在只是为了测试是否有任何参数到达我的操作方法:
<Setter Property="CommandParameter"
Value="10" />
这个方法已经能够正常工作了,我的action方法中的parameter
现在确实是10。
我在将CommandParameter
值绑定到EntityDataGrid
属性时做错了什么?这是否可能?
提前感谢您的帮助!
RelayCommand
和CommandParameter
时,这对我很有用。我希望 WPF 能够使ElementName
在元素树的任何位置都能工作。感谢分享这个ContextMenu
绑定变化! - SliverNinja - MSFT