У меня есть некоторая DataGrid, данные привязаны к моей коллекции (INotifyCollectionChanged
).
Записи должны быть предварительно заполнены при создании новой.Поэтому я отключил добавление в dataGrid (CanUserAddRows="False"
) и обработал событие «PreviewKeyUp» (когда пользователь нажимает Ctrl + N, выполняет метод «CreateRecord» - уведомление о добавленной новой записи).
Этот сценарий работает отлично… почти.
PreviewKeyUp
сработал, только если какой-то элемент в сетке сфокусирован (например, DataGridRow).Но если у меня нет ни одной записи, фокус отсутствует, и событие никогда не запускалось.
Поэтому мой вопрос: возможно ли как-то обрабатывать клавиши ctrl + N, когда DataGrid пуст?Например, триггер Focusable или что-то вроде этого.
Другим обходным решением было бы «поймать» как-то добавление строки и заполнить необходимые поля, но ...Стандартный NewItemPlaceholder будет хорошо, но EditableItems использует конструктор элемента без параметров.И это еще одна мысль, которую я не мог использовать (или я просто не знаю, как: D)
Мои данные должны быть созданы с предопределенными значениями (например, createUserId).
Некоторый кодуточнить:
public MyItemsCollection Items { get; set; }
public MyItemType CreateRecord()
{
MyItemType item = new MyItemType(userId);
item.InitValues();
Items.Add(item);
return item;
}
/********/
public void dataGrid_PreviewKeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.N && e.KeyboardDevice.Modifiers == ModifierKeys.Control)
{
CreateRecord();
e.Handled = true;
}
}
<DataGrid AutoGenerateColumns="False" Name="dataGrid" ItemsSource="{Binding Items}"
CanUserSortColumns="False" CanUserDeleteRows="True"
CanUserAddRows="False" PreviewKeyUp="dataGrid_PreviewKeyUp">
У кого-нибудь есть идеи?