Есть что-то вроде MVC, только без контроллера. Модель — все данные и операции с ними, вьюшка — отображение модели. Модель имеет событие Changed, вьюшки подписываются на это событие и изменяют свой внешний вид в соответствии с изменением модели (в параметрах события передается имя измененного поля, или добавленный подобъект, или удаленный). Для того что бы не думать где отписывать вьюшку от события сделан следующий фокус: перегружены акцепторы у события и вместо традиционного подписывания, вьюшки складываются в список обернутыми в WeakReference, а затем при наступлении события по интерфейсу дергают переданный делегат, или удаляют из списка невалидные (Alive==false).
Сделано это для того что бы не тянуть за собой тяжелые вьюшки, в них часто бывают гриды, причем довольно объемные и не совсем стандартные виндовые. Но тут же возникает проблема — при каждом запросе на вьюшку, приходится создавать новую. Если потом ссылка на нее теряется (например при бесцельном шатании по списку объектов с параллельном отображении его внешнего вида рядом), или закрытии по ошибке формы с вьюшкой объекта, то вьюшку приходтся создавать с нуля, причем не сохраняется частичные настройки пользователя (место в котором стоим при скроле, или положение сплиттеров).
Хотелось бы иметь возможность сохранять про запас одну вьюшку. Т.е. как-то перехватывать событие "вьюшка больше не нужна" и эту ненужную вьюшку куда-нибудь заныкать, а потом отдать при запросе на очередную новую вьюшку того же типа. Интересует именно момент перехвата в момент "контрол больше не нужен и готовиться к убиению, но еще не убит".