Re[45]: Мне аж, право, неловко...
От: Cyberax Марс  
Дата: 14.03.09 22:04
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

C>>Простой пример — два поля. В одно поле вводят число, другое поле показывает процент от этого числа, оба поля редактируемые. Соответственно, если пользователь меняет одно поле, то должно поменяться другое.

G>Two-way binding + converter вы считаете такой сложностью? WPF с этим спокойно справляется.
А теперь идём дальше. Например, нужно учитывать, что если мы редактируем деньги, то нам нужно иногда округлять их до десятков центов.

Т.е. имеем сумму $5.00 в поле денег, и 100% в поле ввода процентов. Меняем 100% на 73% — должно получиться $3.60 ($3.65 округлённый в меньшую сторону), так что процент должен скомпенсироваться до 72%. Или наоборот, нужно иметь целые проценты, но при редактировании суммы дробные проценты нужно округлять.

И иногда это нужно делать через цепочку промежуточных преобразований.

В простых случаях можно пробовать вызывать из ConvertBack из Convert (и наоборот), но если нужно что-то более сложное — то упс. Ну и сам интерфейс конвертера не особо приятный. Мало информации о контексте преобразования и его истории, нет чётких механизмов ветирования и отката изменений до вычисленного корректного состояния и т.п.

Плюс, многие формулы валидации работают в одном направлении (и решать их в обратном направлении — совсем недосуг). Мне для binding'а пришлось вообще прикручивать логический движок, а ты говоришь "простой two-way"...

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

C>>Или другой пример — колонка чисел и сумма. Можно редактировать отдельные поля и поле суммы. При редактировании поля суммы по хитрым правилам должны редактироваться слагаемые. Причём слагаемые могут меняться динамически (например, изменили сумму до $100 — и одно поле заменилось другим, а все значения пересчитались, а если изменили до $110 — это поле снова исчезнет).

G>Это уже MVVM использовать надо, и байндиться на свойства ViewModel.
И она будет повторять визуальную модель.
Sapienti sat!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.