У меня есть простое "DataGridUsercontrol
", в котором есть Datagrid
с одним текстовым столбцом (мне нужно использовать это снова и снова). Это Usecontrol
выставляет MyItemSource
и MySelectedItem
как Dependency Properties
, которые в свою очередь связаны с DataGrid
- Это позволяет мне определять их в UserControl
с использованием DataGridUsercontrol
.
DataGridUsercontrol
также предоставляет несколько ICommand
DP, которые подключены к контекстному меню и клавиатурным вводам. (Это - то, где повторное использование вступает в игру.)
Я не уверен, имеет ли это DataGrid
в повторно используемом UserControl какое-либо отношение к проблеме, но я хотел быть законченным.
Один ввод с клавиатуры, который у меня есть, CTRL + Up с использованием связывания клавиш. Это подключается к DelegateCommand
в виртуальной машине, которая перемещает SelectedItem
«вверх» на один пробел в ObservableCollection
. По сути, это список, который пользователь может изменить в порядке.
Я использую Prism 7 и Unity DI, но это действительно не входит в игру.
Я могу переместить элементвверх или вниз без проблем.
Однако, сразу после изменения на ObservableCollection
, DataGrid
теряет KeyboardFocusWithin
(это подтверждается перехватом события, а также проверкой его в анализаторе WPF, где яможет смотреть IsKeyboardFocusWithin
. Эффект в том, что Datagrid
больше не слушает ввод с клавиатуры. Таким образом, я должен повторно выбрать таблицу, если я хочу снова использовать клавиатуру.
SelectedItem
не делаетне изменяется. SelectedIndex
правильно изменяется, чтобы следовать за тем, куда был перемещен SelectedItem
. Обычная «синяя» подсветка заменяется светло-серой подсветкой.
Мой вопрос заключается в том, как сохранить фокусировку илиЕсть ли хорошее событие для правильной установки фокуса.