Как добавить изменение события в список <T>класса в C #? - PullRequest
1 голос
/ 19 декабря 2011

Я хочу добавить событие в универсальный класс List в C #, чтобы обрабатывать изменения элементов списка в случае добавления или удаления нового элемента. Я создаю класс и наследую его от класса List. Поскольку методы Add, Insert и Remove этого класса не могут быть переопределены, я определяю новые методы Add, Insert и Remove по новому ключевому слову, вызываю родительские методы и затем вызываю мое событие. Я использовал этот класс как свойство в пользовательском элементе управления. В режиме разработки, когда я меняю коллекцию с предоставленным графическим интерфейсом в .net development studio, событие не работает. Как я могу решить эту проблему?

Вот пример определения такого класса

public class SelectorItemCollection : List<SelectorItem>
{
    public new void Add(SelectorItem Item)
    {

        //Call parent method
        base.Add(Item);

        //Raise changing event
        this.OnCollectionChanged();

    }
}

Я определил свойство в своем классе пользовательских элементов управления следующим образом:

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public SelectorItemCollection Items { get; }

Мое желаемое состояние: когда я изменяю элементы в этом диалоговом окне, я хочу вызвать изменяющееся событие из класса коллекции.

enter image description here

Ответы [ 3 ]

14 голосов
/ 19 декабря 2011

Не изобретайте колесо, используйте класс коллекции, который уже поддерживает такие уведомления, например ObservableCollection<T> или BindingList<T> (если вы используете привязку данных в WPF используйте первое; в Windows Forms используйте второе).

Если вы хотите реализовать свой собственный, не наследуйте от List<T>, потому что он не был разработан для наследования. Вместо этого вы можете использовать Collection<T> в качестве базового класса.

2 голосов
/ 19 декабря 2011

Взгляните на BindingList<T> вместо этого, который, кажется, является тем, что вы пытаетесь повторить

1 голос
/ 19 декабря 2011

Вы можете использовать System.ComponentModel.BindingList<SelectorItem> с различными событиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...