Как синхронизировать свойства в модели представления, но прекратить синхронизацию после изменения пользователем второй? - PullRequest
0 голосов
/ 10 декабря 2011

Требование 1

Допустим, у меня есть некоторая модель представления с двумя DateTime свойствами, Start и End. Я бы хотел, чтобы для End было установлено какое-то смещение от Start, и чтобы оно сохранялось даже при изменении Start. Это достаточно просто, прослушав уведомление свойства для Start и затем установив End.

Требование 2

Теперь давайте добавим забавную часть: я хочу иметь возможность прекратить корректировку End, если пользователь явно ее изменит. Другими словами, скажем, это система бронирования авиабилетов, и мы хотим установить конечную дату на 3 дня позже (в зависимости от средней продолжительности пребывания), но если пользователь явно устанавливает конечную дату на определенную дату, то когда он / она снова устанавливает дату начала, дата окончания остается).

Проблема

На первый взгляд может показаться, что вы можете просто прослушать уведомление End и установить какое-то значение, которое обработчик увидит при обработке Start, и сказать: «Хорошо, я не настрою End. Проблема в том, что End не знает , почему изменяется, поэтому обработчик для изменения End мгновенно мгновенно установит условие изменения остановки. Это нарушает требование # 1.

Как мне удовлетворить оба требования?

1 Ответ

0 голосов
/ 10 декабря 2011

Допустим, у нас есть флаг AutoAdjust, который говорит вам, следует ли вам настроить End при изменении Start.AutoAdjust изначально true.

Если установлен End, если интервал между Start и End отличается от интервала «по умолчанию», установите AutoAdjust в false.

Всякий раз, когда установлено Start, если AutoAdjust равно true, то отрегулируйте значение End.

Обратите внимание, что с этой схемой никогда не удастся установитьAutoAdjust вернуться к true, как только оно переключится на false.Это сделано намеренно, и IMHO более интуитивно, чем позволить AutoAdjust перевернуть назад - пользователь может легко понять, что конечная дата перестала автоматически настраиваться, потому что он изменил ее вручную, но не так интуитивно думать, что если он ее установитк своему «авто» значению он снова начнет автонастройку.

...