WPF 数据网格在行删除后失去焦点
本文关键字:删除 失去 焦点 数据 数据网 网格 WPF | 更新日期: 2024-11-08 04:23:32
我正在使用WPF DataGrid行删除键盘"删除"键。但是,删除该行后,DataGrid 失去了焦点,并且 DataGrid.SelectedIndex = -1。
与WinForm数据网格相比,删除一行后,焦点会自动转移到下一个可聚焦的行,这要合理得多。
我所说的"下一个可聚焦"是指,例如:
Row A
Row B
Row C
If we delete Row A, the next focusable will be Row B.
If we delete Row B, the next focusable will be Row C.
If we delete Row C, the next focusable will be Row B (the last row).
如何在 WPF 数据网格中实现相同的效果?
顺便说一下,下面是一个专注于删除后第一行的示例,这并不理想,因为我们希望它是"下一个可聚焦的行"。
private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.RemovedItems.Count > 0)
{
DataGrid grid = sender as DataGrid;
if (grid.SelectedIndex == -1)
{
grid.SelectedCells.Clear();
grid.SelectedIndex = 0;
}
}
}
有什么想法吗?
谢谢。
您将 DataGrid 绑定到什么?您是否尝试过 CollectionView (MSDN)?它有像CurrentPosition和MoveCurrentToNext()方法这样的道具。您可以获取要删除的行的当前位置,然后根据 CollectionView 的排序顺序找到下一个行。
更新:如果正在执行 MVVM,请禁用 DataGrid 的删除(请参阅此答案),并让 VM 从集合中删除该项。您将知道要删除的项目,因此您应该能够确定下一个(或上一个)项目是什么。让 VM 公开一个 SelectedItem 属性,该属性将绑定到 DataGrid.SelectedItem。在 VM 上设置"选定项",应在数据网格中选择该行。
听起来WinForms Datagrid开箱即用地处理了很多问题,所以你可能会觉得你正在重新发明轮子,这对于在"旧"UX技术中自动工作的东西来说是大量的工作。