Однонаправленные привязки
Методы, используемые для однонаправленных привязок: bind
, unbind
и isBound
.
Важно знать, что однонаправленные привязки one-в-одном 1 .Это сделано для поддержания последовательности.Подумайте, что произойдет, если будет разрешено несколько однонаправленных привязок одновременно.Если у нас есть:
A
→ B
A
→ C
Что должно содержать A
?Значение B
или значение C
?Контракт bind
требует, чтобы Property
будет всегда содержать значение ObservableValue
.С javafx.beans.property
:
Все свойства могут быть связаны с ObservableValues одного и того же типа, что означает, что свойство всегда будет содержать то же значение, что и привязанный ObservableValue.
Property
не может поддерживать этот контракт, если есть более одного ObservableValue
для наблюдения.Таким образом, применяется отношение один к одному 1 .
Как следствие этого отношения один к одному 1 , нет необходимости проходитьObservableValue
при звонке unbind
.Единственный возможный ObservableValue
, который мог бы иметь в виду, это тот, который был задан ранее через bind
.
Стоит отметить, что вызов bind
для уже связанного Property
будет неявно отменять привязку от предыдущего ObservableValue
,По крайней мере, так работают стандартные реализации.Я не смог найти документацию, определяющую это поведение, поэтому я полагаю, что реализация может выдать исключение.
1.Технически это отношения многие-к-одному .Более одного Property
может быть связано с одним и тем же ObservableValue
, но этот Property
не может быть связан с более чем одним ObservableValue
.Я оставляю один-к-одному в ответе, однако, потому что я думаю, что это лучше иллюстрирует разницу между однонаправленными и двунаправленными привязками.
Двунаправленные привязки
Методы, используемые в двунаправленных привязках: bindBidrectional
и unbindBidirectional
.
Для двунаправленных привязок отношение равно многие ко многим .Они также не зависят от однонаправленных привязок.С bindBidirectional
:
Создать двунаправленную привязку между этим Свойством и другим.Двунаправленные привязки существуют независимо от однонаправленных привязок.Таким образом, можно добавить однонаправленную привязку к свойству с двунаправленной привязкой и наоборот.Однако такая практика не рекомендуется.
Возможно иметь несколько двунаправленных привязок одного свойства.
Это отношение «многие ко многим» разрешено для двунаправленных привязок, поскольку они вызывают каждоеProperty
чтобы отразить друг друга .Если один из них меняется, другой обновляется.С javafx.beans.property
:
Также возможно определить двунаправленную привязку между двумя свойствами, чтобы оба свойства всегда содержали одно и то же значение.Если одно из свойств изменится, другое будет обновлено.
Это означает, что проблема согласованности, которой обладают однонаправленные привязки, не разделяется двунаправленными привязками.Обратите внимание на следующее:
A
↔ B
↔ C
Если A
изменится, то B
обновится.Поскольку B
обновлен, C
будет также обновляться.Это означает, что в любой момент времени все свойства имеют одинаковое значение.Нет двусмысленности.
Как следствие этого отношения «многие ко многим», цель Property
является необходимой для отмены привязки;градиент Property
должен знать , с которого Property
он должен отвязаться.