Какой тип объекта добавлен IEditableCollectionView? - PullRequest
3 голосов
/ 23 сентября 2010

Добавление объектов с помощью метода addNew () IEditableCollectionView вполне прилично. Однако я не уверен, насколько хорошо он работает с моим общим кодом.

У меня есть ObservableCollection моего базового класса. В зависимости от того, что пользователь хочет видеть, он может быть заполнен DerivedA или DerivedB (или может включать несколько классов производных типов). Он никогда не имеет более 1 типа. У меня есть следующие вопросы об этом с номером 1, являющимся основным вопросом.

1) Какой тип объекта добавляется при вызове метода addNew (). Я предполагаю базу, но не уверен. Что, если База абстрактна? Могу ли я в любом случае убедиться, что он добавляет определенный тип, или он реализован так, что уже добавляет наиболее подходящий тип?

2) Я спрашиваю о проблемах с ObservableCollection при использовании производных классов?

3) Все производные классы реализуют IEditableObject индивидуально, а Base - нет. Моя глупость как вина, потому что я думал, что когда вы реализуете, вам придется определить методы. Я могу просто определить их как абстрактные, а затем переопределить их в производных классах, верно? Если я этого не сделаю, у меня возникнут проблемы с IEditableCollection.

UPDATE:

Я успешно исправил пункт 3) Базовый класс реализует iEditableObject, и абстрактные виртуальные методы выбрасываются в его производные классы. Метод addNew не работает, даже если список заполнен производным элементом.

Я видел одно полу решение. .Net Framework 4.0 реализует новый метод под названием AddNewItem, где вы можете определить элемент, который будет добавлен. Должен решить проблему с безпараметрическими конструкторами и базовыми классами. Однако я работаю в 3,5

Что я могу сделать?

1 Ответ

1 голос
/ 07 ноября 2011

Для такого типа проблем приятно помнить, что код .net framework не является черным ящиком, его можно разобрать с помощью ILSpy , чтобы посмотреть, что он делает, или как Microsoft что-то сделала Работа. Я бы посоветовал вам взглянуть на метод 4.0 и посмотреть, не можете ли вы скопировать его для собственных целей в 3.5, и добавить его в качестве метода расширения.

...