Это больше вопрос дизайна.
Я создаю инструмент, который отображает бизнес-объекты различными способами (например, узлы дерева, элементы представления списка, поля со списком, текстовые поля и т. Д.). Каждый раз, когда пользователь меняет любой из них, возникает событие, которое сигнализирует, что этот бизнес-объект был изменен или коллекция, к которой он принадлежит, была изменена. Поскольку этот бизнес-объект или коллекция, к которой он может принадлежать, может отображаться в нескольких местах, каждый из этих элементов пользовательского интерфейса необходимо обновить, чтобы отразить это изменение. Существует ли элегантное решение для правильного обновления каждого типа элемента пользовательского интерфейса в случае изменения?
У меня есть несколько идей о том, как это можно сделать, но я хотел бы посмотреть, была ли у кого-нибудь эта проблема и довольны ли ее решением. Это C # WinForm, но решение может быть на любом языке.
Мои текущие мысли о проблеме и возможном решении:
Это становится более сложным, когда вы хотите очистить привязки событий (т.е. businessObject.Changed - = ObjectChanged), когда ваши бизнес-объекты становятся частью TreeNodeCollection / ListViewITemCollection / ComboBoxItemCollection и вызывается Clear ().
Как насчет «Сервиса», где каждый объект и его элемент пользовательского интерфейса могут регистрироваться, где события бизнес-объекта могут прослушиваться в одном месте, и каждый элемент пользовательского интерфейса будет обновляться при возникновении событий? Когда все элементы пользовательского интерфейса отменили свою регистрацию, подписка на событие этого объекта удаляется.
Проблема этого решения заключается в том, что каждый элемент управления должен отвечать за регистрацию компонента пользовательского интерфейса и объекта при каждом создании, что может привести к путанице.
Ваши мысли?