我有一个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个项目:
项目1
项目2
项目3
项目4
ITEM5
DataGrid
初始化时,SelectedItem
为空。
然后,用户右键点击Item3
,RelayCommand
,但SelectedItem
仍然为空。
用户右键点击Item1
,RelayCommand
再次触发,但SelectedItem
返回Item3
,我的代码显示错误的商品详情。
是否可以检索MouseRightButtonUp
事件中选择的项目?或者我应该使用其他事件?
答案 0 :(得分:0)
恕我直言,最好的方法是将样式应用于DataGridRow
,这样就可以确保将命令应用于用户实际点击的项目,并且忘记了SelectedItem。请注意以下事项:
<i:Interaction.Triggers>
内使用Style
。似乎有workarounds to this。或者您可以尝试切换到强大的附加命令行为:您在样式here中有一个使用示例,第二个答案。