короткая версия
public class CustomDataGrid : DataGridControl, IXmlSettingsProvider
{
public CustomDataGrid()
{
if (DesignModeHelper.IsInDesignMode) return;
Loaded += (e, a) =>
{
...
};
LostFocus += (e, a) =>
{
if(IsBeingEdited /* &&
CurrentFocusTarget.GetType() == typeof(TabControl)*/)
EndEdit();
};
}
}
Как мне найти UIElement CurrentFocusTarget
в приведенном выше примере?
Длинная версия - Контекст
Мы используем XCeed DataGrid для отображения данных на разных вкладках лениво загруженного TabControl. Каждая вкладка загружается с отложенной загрузкой, поэтому содержимое отображается (и, что более важно, данные извлекаются) только тогда, когда вкладка отображается. Весь поток данных отлично работает с использованием подхода MVVM.
Проблема
Каким-то образом, когда пользователь вносит изменения в ячейку и Вкладка изменений , свойство ViewModel с привязкой к данным (которое уже обновлено) устанавливается на null
.
Чтобы избежать этого, можно вызвать EndEdit (), когда фокус потерян из сетки.
Однако я хочу вызывать его, только когда фокус потерян для TabItem (или TabControl).
Итак, мой вопрос:
Какой самый простой способ узнать, где Focus
находится прямо сейчас , из-за кода. Я осмотрел FocusManager
, но не могу найти текущего носителя Фокуса (или для которого потерян фокус).