Re[3]: Двойное оповещение об изменении объекта
От: Ромашка Украина  
Дата: 07.06.09 11:22
Оценка: 2 (1) -1
thanks написав(ла):
> А если взять, например, RichTextBox. В него юзер ввёл 5 КБ текста, этот
> текст в итоге попадает в модель, вызывает её изменение и эти же 5 КБ
> текста приходят обратно в вид.

На самом деле, пример с RichTextBox еще более показательный, ибо даже
если изменения текста приняты, не факт, что приняты в полном объеме или
в таком же виде. Например, заменены кавычки на " в вебе, вырезаны
инструкции "drop database" или еще какая-нибудь фигня.

> Тут получается что лишний трафик бегает + состояние RichTextBox (текущее

> выделение, позиция курсора) сбросится из-за того, что снова задали этот
> же текст

Сохраняйте выделение, позицию курсора перед изменением. И пытайтесь их
восстановить.

> А как быть с случаем когда логика не приняла текст и нужно сбросить

> текст на старый.

Считать текст свойства? Только так, даже если модель приняла текст. По
хорошему, изменение одного свойства в виде не подразумевает того, что в
модели изменится только одно свойство. Например, при изменении цены в
строке должна измениться сумма документа, при изменении текста должна
стать доступной кнопка сохранения и т.д. и т.п. Поэтому приблизительно так:
Изменяется что-то в виде. Контроллер получает событие, меняет что-то в
модели. Модель изменяет свое свойство (или несколько), выбрасывает
несколько событий контроллеру. Контроллер по каждому из событий
считывает свойство модели и присваивает его виду.

> У меня получается, что все эти телодвижения вызывают повторные вызовы

> изменения модели и вида
> (вид-контроллер-модель-контроллер-вид-контроллер-модель)

Это нормально. По другому, в общем случае, и не получится.
Posted via RSDN NNTP Server 2.1 beta


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