не вызывать при редактировании коллекции - PullRequest
1 голос
/ 10 ноября 2010

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

[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.

1 Ответ

3 голосов
/ 10 ноября 2010

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

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

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...