Как программно создать объект для новой строки в DataGrid? - PullRequest
1 голос
/ 19 марта 2012

У меня есть ObservableCollection<IInterface>, который привязан к DataGrid.IInterface - это интерфейс.

Я хочу добавить новую строку для пользователя (без кнопки добавления).Я добавил CanUserAddRows="true", но он работает только тогда, когда dataGrid связан с ObservableCollection<MyClass>.

Как программно создать новый объект для новой строки?

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Чтобы ответить на ваш вопрос: «программно» вы можете добавить, просто добавив / вставив объект в ObservableCollection - но я думаю, что вам нужна функция автоматического добавления, которую вы описали ранее.

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

1 голос
/ 11 июля 2012

У меня недавно была такая же проблема. Я разместил решение в своем блоге: Включить встроенное добавление записей для моделей представлений с нестандартными конструкторами / интерфейсами

Это в основном включает в себя создание собственного ListCollectionView (может быть сделано аналогично для остальных) и привязку сетки к этому представлению. У пользовательского представления есть фабричный метод, используемый для создания строк, поскольку реализация по умолчанию в ListCollectionView не поддерживает добавление строк для интерфейсов или классов, которые не имеют конструктора по умолчанию.

Обратите внимание, что даже если вы не используете CollectionView в своей модели представления MVVM, а используете обычный список или IBindingList, WPF создаст для вас особое представление коллекции. Подробнее CollectionViewSource WPF

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