2010-11-10 3 views
1

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

[EditorAttribute(typeof(System.ComponentModel.Design.CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] 
public List<SomeType> Textures 
{ 
    get 
    { 
     return m_collection; 
    } 
    set 
    { 
     m_collection = value; 
    } 
} 

Однако, когда я пытаюсь изменить эту коллекцию с CollectionEditor , set никогда не называется; почему это и как я могу это исправить?

Я также попытался обернуть мой List<SomeType> в моей коллекции, как описано здесь:

http://www.codeproject.com/KB/tabs/propertygridcollection.aspx

Но ни Add, ни Remove вызывается, когда я добавлять и удалять элементы в CollectionEditor.

+0

Хороший вопрос, подчеркивает общее недоразумение. – annakata

+0

Рад помочь;) –

ответ

3

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

Использование пример кода, это будет вызывать только добытчик, а затем изменить существующую коллекцию (никогда не сбросить его):

var yourClass = new YourClass(); 
var textures = yourClass.Textures 

var textures.Add(new SomeType()); 

Для вызова сеттера, вы на самом деле нужно назначить новую коллекцию Имущество:

var yourClass = new YourClass(); 
var newTextures = new List<SomeType>(); 
var newTextures.Add(new SomeType()); 

yourClass.Textures = newTextures; 
+0

Bump. И поэтому публикация списка вместо IEnumerable и метода AddFoo обычно рассматривается как анти-шаблон. – annakata

+0

@annakata Не могли бы вы подробнее рассказать о том, как это сделать в ответ? –

+0

@annakata Я добавил новый вопрос здесь http://stackoverflow.com/questions/4145324/whats-the-correct-way-to-edit-a-collection-in-a-property-grid –

Смежные вопросы