Установщик свойства не вызывается с CollectionEditor - PullRequest
1 голос
/ 20 сентября 2010

У меня есть пользовательский элемент управления со свойством Items.Я применил EditorAttribute с UITypeEditor типа CollectionEditor.

Тип коллекции:

[Serializable]
[Editor(typeof(CollectionEditor), typeof(UITypeEditor))]
public class ListItemsCollection : CollectionBase
{
    // methods
}

Объявление свойства в элементе управления:

private new ListItemsCollection _Items;

[Editor(typeof(CollectionEditor), typeof(UITypeEditor))]
public new ListItemsCollection Items
{
    get
    {
        return _Items;
    }
    set
    {
        _Items = value;

        // do other UI changes
    }
}

Проблема:
Когда я перетаскиваю этот элемент управления на поверхность конструктора, я могу добавить элементы в свойство Items, используя PropertyGrid.Но когда я нажимаю кнопку Ok CollectionEditor, метод вызова свойства Items не вызывается.

AFAIK, когда значение возвращается из метода EditValue метода UITypeEditor класс, который должен вызываться блок установки свойства.

Это сводит меня с ума.Я даже пытался добавить Event в ListItemsCollection, чтобы при добавлении элементов я мог делать все, что захочу, с помощью пользовательского интерфейса элемента управления.

Это не должно быть сложно.Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 20 сентября 2010

Я пытаюсь переформулировать вашу ситуацию: используя следующий код, я получаю окно сообщения, показывающее всякий раз, когда я редактирую список из окна свойств VS.Остерегайтесь, что вы должны создать список самостоятельно.Если вы не создадите его, VS создаст временный список, который вы можете редактировать из окна свойств, но не присваивает свойству этот список (поэтому ваш установщик никогда не будет вызываться)

1 голос
/ 20 сентября 2010

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

...