thanks написав(ла):
> А если взять, например, RichTextBox. В него юзер ввёл 5 КБ текста, этот
> текст в итоге попадает в модель, вызывает её изменение и эти же 5 КБ
> текста приходят обратно в вид.
На самом деле, пример с RichTextBox еще более показательный, ибо даже
если изменения текста приняты, не факт, что приняты в полном объеме или
в таком же виде. Например, заменены кавычки на " в вебе, вырезаны
инструкции "drop database" или еще какая-нибудь фигня.
> Тут получается что лишний трафик бегает + состояние RichTextBox (текущее
> выделение, позиция курсора) сбросится из-за того, что снова задали этот
> же текст
Сохраняйте выделение, позицию курсора перед изменением. И пытайтесь их
восстановить.
> А как быть с случаем когда логика не приняла текст и нужно сбросить
> текст на старый.
Считать текст свойства? Только так, даже если модель приняла текст. По
хорошему, изменение одного свойства в виде не подразумевает того, что в
модели изменится только одно свойство. Например, при изменении цены в
строке должна измениться сумма документа, при изменении текста должна
стать доступной кнопка сохранения и т.д. и т.п. Поэтому приблизительно так:
Изменяется что-то в виде. Контроллер получает событие, меняет что-то в
модели. Модель изменяет свое свойство (или несколько), выбрасывает
несколько событий контроллеру. Контроллер по каждому из событий
считывает свойство модели и присваивает его виду.
> У меня получается, что все эти телодвижения вызывают повторные вызовы
> изменения модели и вида
> (вид-контроллер-модель-контроллер-вид-контроллер-модель)
Это нормально. По другому, в общем случае, и не получится.
Posted via RSDN NNTP Server 2.1 beta