Если вы хотите, чтобы элементы пользовательского интерфейса редактировали бизнес-модель без реализации собственных обработчиков событий, бизнес-модель должна иметь BindingList.
Каждый раз, когда вы делаете что-то вроде new BindingList<MyWidget>( list )
, вы отсоединяете привязку откорневой список.Если элемент редактируется, все будет работать нормально, но добавления и удаления не будут отражены в исходном списке.
Я недавно пытался реализовать нечто подобное, нажав на событие BindingList ListChanged
, котороеобновил мою модель, чтобы отразить изменения BindingList, но если модель была изменена контроллером, он не обновил BindingList в пользовательском интерфейсе.
Вы можете создавать специальные методы доступа к своим спискам, которые вызывают события каждый раз, когда вы добавляетеили удалить элементы из списка, но это просто переизобретает колесо BindingList с дополнительными издержками.