Сообщать Window, что в классе-сервисе были выполнены действия

Есть класс, Например WorkService. Есть окно WorkWindow с гридом Work-ов

В WorkService есть метод ProcessingWork, который вызывается извне принимает параметры, валидирует их и записывает новый Work в базу данных.

Встал вопрос - как дополнить метод ProcessingWork или доработать WorkService и WorkWindow, чтобы после записи методом ProcessingWork Work-а в базу данных, сообщать об этом Workwindow. Окно, в свою очередь, будет обновлять грид с ворками и показывать, что появился новый ворк.


Ответы (1 шт):

Автор решения: Pavel Popov

Как вариант реализовать это через событие. Если планируется закрывать окно, но не завершать работу программы. Необходимо при закрытии окна отписаться от события, иначе GC не сможет утилизировать объект вашей формы. _workService.ProcessingWorkAdded -= _processingWorkAdded;

 class WorkService
    {
        public event EventHandler ProcessingWorkAdded;

        public void ProcessingWork()
        {
            //Некий код работы 

            ProcessingWorkAdded?.Invoke(this, EventArgs.Empty);
        }
    }

    class WorkWindow
    {
        private readonly WorkService _workService;

        public WorkWindow(WorkService workService)
        {
            _workService = workService;
            _workService.ProcessingWorkAdded += _processingWorkAdded;

            Closed += _windowClosed;
        }

        private void _processingWorkAdded(object sender, EventArgs e)
        {
            //Обновление грида
        }

        private void _windowClosed(object sender, EventArgs e)
        {
          _workService.ProcessingWorkAdded -= _processingWorkAdded;
        }
    }
→ Ссылка