Задать вопрос
@h1_0ne

Почему не работают эвенты коллекций, если UserControl, владеющей этой коллекцией, является полем, а не локальной переменной?

Добрый день. Имею коллекцию контролов, унаследованной от IList. В методе Add я вызываю событие ReportAdded
spoiler

internal class ReportList : IList<PreviewReport>
    {
     ...
    public readonly List<PreviewReport> Items;
public ReportList()
        {
            Items = new List<PreviewReport>();
        }

        public void Add(PreviewReport previewReport)
        {
            Items.Add(previewReport);
            ReportAdded?.Invoke(previewReport, new EventArgs());
        }
     ....

    }



Так же есть UserControl Folder, который содержит эту коллекцию. Идея в том, что бы при добавлении элемента в коллекцию он добавлялся в Controls текущей Folder. Для этого в конструкторе Folder я подписываюсь на событие коллекции ReportAdded

spoiler


public Folder()
        {
            InitializeComponent();
            Reports = new ReportList();

            Reports.ReportAdded += Reports_ReportAdded;
        }



Так же имею обработчик этого события, который должен по определенной логике добавлять элемент из Reports в контролы текущей Folder

spoiler


private void Reports_ReportAdded(object sender, EventArgs e)
        {
            //логика
        }



Затем в конструкторе формы добавляю элементы в коллецию Folder.

spoiler


for (int i = 0; i < 8; i++)
                folder1.Reports.Add(new PreviewReport());



Проблема в том, что если объект Folder будет создан в каком либо методе и будет являться локальной переменной, то событие отработает. Если же объект Folder является полем, то это событие будет null, хотя участок кода, где выполняется подписка на событие, проходит.

Folder является полем

Подписался на событие
5e6cc561dc8ae823043335.png

Добавляю элементы
5e6cc5ba2e234995142208.png

событие null
5e6cc5ef7ab6e690572113.png


Folder является локальной переменной

Создаю объект
5e6cc6b6513d9934523779.png

происходит подписка на событие
5e6cc561dc8ae823043335.png

событие отрабатывает
5e6cc6f1072d8130991392.png


Почему так происходит и как сделать так, что бы событие отрабатывалось независимо от того, является ли Folder полем, или же локальной переменной?
  • Вопрос задан
  • 43 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы