У меня есть проект Windows Form, который я только что начал. В форме у меня есть список, который я загружаю с помощью продуктов. Когда кто-то дважды щелкает продукт, я хочу, чтобы он вызвал событие ProductChanged. Другие объекты в моем проекте будут подписываться на это событие и обновлять такие вещи, как другие части графического интерфейса пользователя, при изменении продукта.
У меня вопрос, где должно быть мероприятие и кто должен его поднимать? Должно ли событие быть в форме и вызвано обработчиком двойного щелчка списка? Или я должен настроить его там, где событие находится в моем классе Products, и список вызывает метод этого класса, чтобы сообщить ему, что продукт изменился. И тогда класс Product вызовет событие? Или надо сделать по-другому?





Измененный продукт является событием пользовательского интерфейса, это имело бы смысл, если бы он был вызван в форме, а другие элементы пользовательского интерфейса подпадали бы под это событие.
Поле со списком должно вызывать событие, поскольку продукт этого продукта изменился.
Зависит от того, что означает ваше мероприятие. Если намерение состоит в том, чтобы уведомить подписчиков о том, что объект Product был изменен, то он принадлежит к классу Product и должен запускаться кодом внутри этого класса. Если намерение состоит в том, чтобы уведомить о том, что был выбран другой объект Product, то он принадлежит представлению, которое управляет списком продуктов (вашим списком / формой).
Имя ProductChanged подразумевает, что событие запускается, когда продукт был изменен. Я бы поднял событие в классе продукта, потому что в этом случае каждое изменение будет запускать событие. Если вы запускаете его в графическом интерфейсе, а позже добавляете (например) функцию импорта, скорее всего, вы забыли запустить событие после изменения.