Кэш объектов на WeekReference, как лучше всего сделать?
От: bornkiller  
Дата: 04.07.08 13:25
Оценка:
Здравствуйте.

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

Сделано это для того что бы не тянуть за собой тяжелые вьюшки, в них часто бывают гриды, причем довольно объемные и не совсем стандартные виндовые. Но тут же возникает проблема — при каждом запросе на вьюшку, приходится создавать новую. Если потом ссылка на нее теряется (например при бесцельном шатании по списку объектов с параллельном отображении его внешнего вида рядом), или закрытии по ошибке формы с вьюшкой объекта, то вьюшку приходтся создавать с нуля, причем не сохраняется частичные настройки пользователя (место в котором стоим при скроле, или положение сплиттеров).

Хотелось бы иметь возможность сохранять про запас одну вьюшку. Т.е. как-то перехватывать событие "вьюшка больше не нужна" и эту ненужную вьюшку куда-нибудь заныкать, а потом отдать при запросе на очередную новую вьюшку того же типа. Интересует именно момент перехвата в момент "контрол больше не нужен и готовиться к убиению, но еще не убит".

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.