我有一个简单的“ DataGridUsercontrol
”,其中有一个带有文本列的Datagrid
(我需要一遍又一遍地重复使用)。
Usecontrol
公开了MyItemSource
和MySelectedItem
作为Dependency Properties
,它们又绑定到DataGrid
-这让我在UserControl
中定义它们使用DataGridUsercontrol
。
DataGridUsercontrol
还公开了多个连接到上下文菜单和键盘输入的ICommand
DP。 (这是可重用性发挥作用的地方。)
我不确定可重复使用的UserControl中的DataGrid
是否与此问题有关,但我想做到这一点。
我使用键盘绑定输入的是 CTRL + Up 。这与VM中的DelegateCommand
挂钩,从而将SelectedItem
“ {”向上移动了ObservableCollection
中的一个空间。本质上,这是一个用户可以更改其顺序的列表。
我正在使用Prism 7和Unity DI,但这在这里确实没有发挥作用。
我可以上下移动项目。
但是,在ObservableCollection
更改之后,DataGrid
立即丢失了KeyboardFocusWithin
(这是通过捕获事件并在WPF分析器中进行检查来确认的,我可以在其中查看IsKeyboardFocusWithin
。结果是Datagrid
不再监听键盘输入,因此,如果我想再次使用键盘,则必须重新选择表。
SelectedItem
不变。 SelectedIndex
正确更改为跟随SelectedItem
移至的位置。正常的“蓝色”突出显示将替换为浅灰色突出显示。
我的问题是我该如何保持焦点或是否有一个好事件要抓住才能正确地重新设置焦点。