Вопрос

У меня есть пользовательский контроль, который имеет 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
    }
}

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

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

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

Это не должно быть сложно. Что я делаю неправильно?

Это было полезно?

Решение

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

    public UserControl1()
    {
        InitializeComponent();
        list = new BindingList<ListViewItem>();
        list.ListChanged += new ListChangedEventHandler(list_ListChanged);
    }

    void list_ListChanged(object sender, ListChangedEventArgs e)
    {
        MessageBox.Show(e.ListChangedType.ToString());
    }

    private BindingList<ListViewItem> list;

    public BindingList<ListViewItem> List1
    {
        get { return list; }
    }

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top