Я всегда успешно использовал клонированный подход.Подход клонирования представлен в двух вариантах: привязка к клону и привязка к оригиналу.
Привязка к клону сделает это таким образом, что любая другая привязка к тому же полю на экране не будет обновляться, пока ваше диалоговое окно открыто.При нажатии кнопки «ОК» вы копируете клон в исходный объект, а при отмене просто выбрасываете клон.
Привязка к оригиналу позволяет выполнять обновления экрана для других компонентов, привязанных к тому же полю.Когда нажата OK, вы выбрасываете клона.Когда нажата кнопка отмены, вы копируете клон в оригинал.
Я предпочитаю подход привязки к клону, поскольку мне кажется странным видеть обновление других компонентов экрана, пока открыто диалоговое окно.Я думаю, что это создает путаницу относительно того, отменит ли откат изменения, которые появляются за пределами диалогового окна.
Альтернатива состоит в том, чтобы использовать стратегию сбрасываемого связывания, где привязка может быть настроена таким образом, что она не будетобновлять объект до тех пор, пока не будет вызван какой-то метод flush ().Если ваша инфраструктура привязки данных не поддерживает это, может потребоваться много усилий, чтобы решить эту проблему позже.