Datagrid добавляет новый предмет, когда Пустая строка получает фокус - PullRequest
1 голос
/ 05 июня 2019

Я бы хотел, чтобы мои <DataGrid/> с CanUserAddItems="true" установили новый ItemVM, когда пустая строка получает фокус вместо поведения по умолчанию, чтобы создать новый ItemVM, когда пустая строка первый отредактированный . Или, другими словами, я хотел бы изменить рабочий процесс DataGrid по умолчанию с:

  1. Пользователь вводит пустую строку
  2. Пользователь нажимает F2
  3. Новый ItemVM получает экземпляр

к пользовательскому рабочему процессу, который не требует явного редактирования сначала пустой строки:

  1. Пользователь вводит пустую строку
  2. Новый ItemVM получает экземпляр

не важно, в какой момент новый ItemVM добавляется к границе ItemsSource.

1 Ответ

1 голос
/ 05 июня 2019

Класс DataGrid использует частный метод AddNewItem для создания экземпляра базового объекта данных.

Если вы получите ссылку на контейнер строк для заполнителя, вы можете обработать его событие GotFocus и вызвать метод AddNewItem(), используя отражение:

private void DataGrid_Loaded(object sender, RoutedEventArgs e)
{
    DataGridRow newItemPlaceholderRow = (DataGridRow)dg.ItemContainerGenerator.ContainerFromItem(CollectionView.NewItemPlaceholder);
    if (newItemPlaceholderRow != null)
        newItemPlaceholderRow.GotFocus += (ss, ee) =>
        {
            typeof(DataGrid).GetMethod("AddNewItem",
                System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
                .Invoke(dg, null);
        };
}

Обратите внимание, что AddNewItem() недокументирован и может быть изменен или удален в будущих версиях, но если вы действительно хотите изменить настройки встроенного элемента управления, другой вариант, вероятно, будет заключаться в создании вашего собственного.

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