в wpf datagrid, как получить пустую строку на вершине?

в wpf datagrid, как получить пустую строку на вершине? т.е. когда пользователь хочет добавить новую строку, она всегда прибывает внизу. Но я хочу, чтобы это было на вершине... я могу сделать это в XAML?

5
задан kedar 22 February 2010 в 21:44
поделиться

4 ответа

Этот ответ во многом зависит от того, как вы привязываете свой DataGrid, в частности от того, какой базовый тип вашего ItemsSource. В этом ответе предполагается, что вы используете ObservableCollection . Поскольку вы конкретно упоминаете WPF, я также предполагаю, что вы имеете в виду .NET 4.0, поскольку DataGrid доступен только в Silverlight 3 и .NET 4.0.

Я предполагаю, что вы создаете новую строку, вызывая

ItemSource.Add(new MyObject());

. Чтобы получить желаемое поведение, используйте вместо этого следующее:

ItemSource.Insert(0, new MyObject());
0
ответ дан 14 December 2019 в 01:06
поделиться

Вам нужно будет написать свой собственный шаблон для DataGrid, где вы бы поместите часть NewItemPlaceholder поверх сетки. Для начала посмотрите на этот пример (хотя этот пример не является ответом, он укажет вам правильное направление).

Кстати, позвольте мне спросить, зачем вам нужно, чтобы NewItemPlaceholder был наверху? Это как бы нарушает естественный поток сверху вниз, который мы так привыкли видеть при работе со списками / сетками.
Возможно, будет более интуитивно понятным иметь элемент «Новый элемент» внизу и параметр «Вставить элемент» в контекстном меню для сетки или что-то в этом роде. Это, конечно, только мое мнение.

0
ответ дан 14 December 2019 в 01:06
поделиться

Если вы используете подход MMVM, вы можете добавить новую строку программно, например:

        var newEmp = new EmployeeViewModel(new EmployeeDto());
        EmployeeList.Add(newEmp);
        EmployeeList.Move(EmployeeList.IndexOf(newEmp), 0);

В моем примере я использую EmployeeListViewModel для отображения ObservableCollection из EmployeeViewModels.

Тогда вы также можете писать тесты для этого поведения. Больше контроля, чем в XAML ....

/ Johan

1
ответ дан 14 December 2019 в 01:06
поделиться

А как насчет NewItemPlaceholderPosition.AtBeginning ? У меня нет примера кода, но, похоже, вы это описываете. Вы всегда можете сделать то, что предлагает Йохан, и программно переместить или отсортировать элементы в сетке.

Пример кода, добавленный Рэем Бернсом:

var view = CollectionView.GetDefaultCollectionView(EmployeeList)
             as IEditableCollectionView;
if(view!=null)
  view.NewItemPlaceholderPosition = NewItemPlaceholderPosition.AtBeginning;

Обратите внимание, что для этого требуется NET Framework 3.5 или выше.

8
ответ дан 14 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: