Добрый день. Имею коллекцию контролов, унаследованной от 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 является полем
Подписался на событие
Добавляю элементы
событие null
Folder является локальной переменной
Создаю объект
происходит подписка на событие
событие отрабатывает
Почему так происходит и как сделать так, что бы событие отрабатывалось независимо от того, является ли Folder полем, или же локальной переменной?