在数据网格上右键单击事件后设置的SelectedItem
本文关键字:事件 设置 SelectedItem 单击 右键 数据 数据网 网格 | 更新日期: 2023-09-27 18:08:40
我有一个DataGrid
如下
<DataGrid Margin="10,89,10,10"
AlternatingRowBackground="#FFB9E2FF"
ItemsSource="{Binding ResultDetails, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
AutoGenerateColumns="True"
CanUserAddRows="False"
IsReadOnly="True"
SelectionMode="Single">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseRightButtonUp">
<cmd:EventToCommand Command="{Binding ResultGridMouseClickCommand, Mode=OneWay}" />
</i:EventTrigger>
<i:EventTrigger EventName="MouseDoubleClick">
<cmd:EventToCommand Command="{Binding ResultGridDblClickCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>
我有一个RelayCommand
来处理MouseRightButtonUp
事件
private void ExecResultGridMouseClickCommand()
{
if (SelectedItem == null) return;
DisplayInfo(SelectedItem);
}
假设我在DataGrid
中有5个项目:Item1第二条Item3Item4Item5
当DataGrid
init时,SelectedItem
为null。然后用户右键单击Item3
, RelayCommand
触发,但SelectedItem
仍然为空。用户右键点击Item1
, RelayCommand
再次启动,然而,SelectedItem
返回Item3
,我的代码显示了错误的项目详细信息。
是否可以检索在MouseRightButtonUp
事件中选择的项目?或者我应该用其他事件代替?
IMHO,最好的方法是对DataGridRow
应用样式,这样可以确保命令应用于用户实际单击的项目,而忘记SelectedItem。注意:
- DataContext现在将项目本身,而不是集合。
- 不能在
Style
中使用<i:Interaction.Triggers>
。似乎有变通的办法。或者你可以尝试切换到强大的附加命令行为:这里有一个样式内使用的例子,第二个答案。