【问题标题】:WPF DataGrid lost focus after row deleteWPF DataGrid 在行删除后失去焦点
【发布时间】:2015-03-10 12:20:02
【问题描述】:

我正在通过键盘“Delete”按键使用 WPF DataGrid 行删除。 但是,删除该行后,DataGrid 失去了焦点,DataGrid.SelectedIndex = -1。

相对于WinForm datagrid,删除一行后,焦点自动转移到下一个可聚焦的行,合理得多。

“下一个可聚焦”是指,例如:

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 不会失去焦点,删除的行(项目)会。并且要实现 behavior (这不是默认值),您必须做一些工作,例如:禁用删除、手动处理按键、处理 Delete 键以删除行/行并应用您想要的行为。
  • 如何填写您的DataGrid?是通过绑定它的ItemsSource吗?
  • @Sinatr 我无法手动处理,出于某种原因我为删除做了键绑定。
  • @Tomtom,是的,ItemsSource 确实绑定到 ViewModel 中定义的数据,并且 DataGrid 是可编辑的。
  • 那么DataGrid 会自动将焦点设置到下一行

标签: c# wpf datagrid


【解决方案1】:

您将 DataGrid 绑定到什么?您是否尝试过 CollectionView (MSDN)?这有像 CurrentPosition 和 MoveCurrentToNext() 方法这样的道具。您可以获取被删除行的当前位置,然后根据 CollectionView 的排序顺序找到下一个。

更新: 如果您正在执行 MVVM,请禁用 DataGrid 的删除 (see this answer) 并让您的 VM 从集合中删除该项目。您将知道要删除哪个项目,因此您应该能够弄清楚下一个(或上一个)项目是什么。让您的 VM 公开您将绑定到 DataGrid.SelectedItem 的 SelectedItem 属性。在您的 VM 上设置 SelectedItem,然后应在 DataGrid 中选择该行。

听起来 WinForms Datagrid 开箱即用地处理了很多这样的事情,所以您可能觉得自己在重新发明轮子,而且对于在“旧”UX 技术中自动运行的东西来说,这需要做很多工作.

【讨论】:

  • “获取被删除行的当前位置”,是的,我正在尝试,但是有没有简单的方法可以传递出去?
  • 我将它绑定到一个 IObservableCollection。
  • 集合视图 (msdn.microsoft.com/en-us/library/…) 有助于导航数据集合。 ObservableCollection 会在集合更改时通知您,这对导航没有帮助。我会用更多信息更新我的答案。
  • 行将被选中但不会聚焦这是两个截然不同的DataGridRow状态。
猜你喜欢
  • 1970-01-01
  • 2013-04-03
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 2017-04-04
相关资源
最近更新 更多