WPF DataGrid, обрабатывать ключи и нет данных - PullRequest
0 голосов
/ 02 марта 2012

У меня есть некоторая 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">

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 02 марта 2012

Почему бы не попытаться присоединиться к PreviewKeyUp окна ... и, если в сетке данных нет записи, принудительно ... или просто принудительно, независимо от этого.Пока человек находится в этой форме, это может подразумеваться, если форма или сетка имеют фокус для такого нажатия клавиши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...