【发布时间】:2011-07-23 12:07:21
【问题描述】:
我有一个 WPF DataGrid,其中一些数据绑定到 LINQ to SQL 实体类。一列是显示给定航班的飞行时间的时钟,该时间是使用 Flight 的部分类中的逻辑计算的。我有一个计时器,每 2 秒调用一次 datagrid.Items.Refresh 来更新时钟。
刷新工作正常,但现在我正在添加键盘快捷键。使用键盘箭头在单元格中导航可以在定时器关闭的情况下正常工作,但在启用刷新定时器的情况下,获得焦点的单元格(实际上是整个数据网格)会失去焦点。
我需要以某种方式保持焦点(首选)或在 DataGrid 获得焦点时禁用计时器。我什至似乎无法让后者工作。我试过了:
if (!dataGrid.IsFocused)
dataGrid.Items.Refresh();
和
if (!dataGrid.IsKeyboardFocused)
dataGrid.Items.Refresh();
对于计时器,但即使数据网格被聚焦,这些属性也会返回 false。
有什么想法吗?
【问题讨论】:
-
只存储选中行的索引,刷新后设置selectedIndex
-
为什么不在绑定实体的定义中异步调用 PropertyChanged 并更改计时器(或部分实体类中的某些逻辑)调用属性。然后您可以将 UpdateSource.OnPropertyChanged 用于您的 DataGridColumn 绑定,这应该(理论上)防止整个 DG 刷新并且只刷新更改的实体(从而解决您的焦点问题并在理论上带来更好的性能)。我错过了什么吗?
标签: wpf datagrid timer focus refresh