C# 在DataGrid上的右键单击事件后选择编辑项集
我有一个C# 在DataGrid上的右键单击事件后选择编辑项集,c#,wpf,datagrid,mvvm-light,relaycommand,C#,Wpf,Datagrid,Mvvm Light,Relaycommand,我有一个DataGrid,如下所示 <DataGrid Margin="10,89,10,10" AlternatingRowBackground="#FFB9E2FF" ItemsSource="{Binding ResultDetails, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding SelectedItem, Mod
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>
假设我在数据网格中有5项:
项目1
项目2
项目3
项目4
项目5
当DataGrid
init时,SelectedItem
为空。
然后用户右键单击Item3
,RelayCommand
fire,但SelectedItem
仍然为空。
用户右键单击Item1
,RelayCommand
再次激发,但是,选择editem
returnItem3
,我的代码显示错误的项目详细信息
是否可以检索在
MouseRightButtonUp
事件中选择的项目?或者我应该使用其他事件来代替?IMHO,最好的方法是将样式应用于DataGridRow
,这样可以确保命令应用于用户实际单击的项目,而忽略SelectedItem。注意以下几点:
- DataContext现在将显示项本身,而不是集合
- 不能在
样式中使用
。似乎有。或者您可以尝试切换到强大的附加命令行为:您在样式中有一个用法示例,第二个答案
SelectedItem
的设置器。在这种情况下,我可能需要在右键单击事件中使用一个标志,并在标志打开时在SelectedItem
的setter中显示信息,然后重置标志,但我认为这不是一个好方法,或者这是一个最佳做法?我发现的另一个选项是使用鼠标按钮ventargs
中的VisualTreeHelper
来定位所选行,我还没有尝试过这个,因为我想找到一些没有UI元素的解决方案。供其他人参考:更新:对于我关于SelectedItem
的第一条评论,我发现了另外一个问题,在显示信息后,用户可以右键单击该项目以再次显示信息,SelectionChanged
事件或SelectedItem
在选择同一项时不会被触发。@Nax感谢ans。最后,我用悬停选择启用(受ans启发)更改了DataGrid
,它将在右键单击之前分配SelectedItem
,缺点是,即使控制被禁用,它也会分配。。。
private void ExecResultGridMouseClickCommand()
{
if (SelectedItem == null) return;
DisplayInfo(SelectedItem);
}