в wpf datagrid как получить пустую строку сверху? - PullRequest
5 голосов
/ 23 февраля 2010

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

Ответы [ 4 ]

8 голосов
/ 05 июня 2010

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

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

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

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

1 голос
/ 23 марта 2010

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

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

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

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

/ Johan

0 голосов
/ 26 февраля 2010

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

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

0 голосов
/ 23 февраля 2010

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

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

ItemSource.Add(new MyObject());

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

ItemSource.Insert(0, new MyObject());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...