我已经为此工作了几天,但似乎无法提出解决方案
DataGrid
我有一个计时器上的代码,每隔几秒刷新一次
我尝试了许多刷新选项,但最后他们都失去了用户的注意力,有时也失去了SelectedItem
这是我的代码:
AddHandler bw.RunWorkerCompleted, Function(sender As Object, e As ComponentModel.RunWorkerCompletedEventArgs)
Dim lst = e.Result
Dim lst2 = CType(lst, List(Of Object)).OfType(Of INotifyPropertyChanged)()
'If Items.Count = 0 Then
Dim a = SelectedItem
Collection.Clear()
Collection.AddRange(lst2)
SelectedItem = a
'ItemsSource = lst
'End If
'For Each rw In lst
' Dim mtch = Collection.Where(Function(x) x.GetHashCode = rw.GetHashCode)
'Next
我留下了评论,这样你就可以看到我尝试过的不同方法
结果:
如果我直接设置ItemsSource
结果(如注释中所示),然后SelectedItem
保持Keyboard.FocusedElement
稳定直到上述代码结束,但在此代码结束和下一个刻度之间的某个位置它们都变成了Nothing
如果我去,ObservableCollection
那么SelectedItem
一旦我清除集合就会丢失,并且Keyboard.FocusedElement
只会在滴答声之间的某个时间丢失。尽管 SelectedItem 可以通过临时支持变量保留在这里
所以关键是我们如何在保持(最重要的)键盘焦点的同时刷新数据库中的项目
是的,我知道这ObservableCollections
不是“制造”要重置的。事实上,我对使用一个并不感兴趣。它只是保留了一个加号SelectedItem
PS我也尝试挂钩几个事件(OnItemsSourceChanged
,SourceUpdated
...),但他们没有在正确的时间被解雇,或者根本没有被解雇
有任何想法吗?
我真的很感激
谢谢你