gpt4 book ai didi

java - 为什么我们不能将属性作为参数传递给 JavaFX 中的 Property#unbind() ?

转载 作者:行者123 更新时间:2023-12-02 10:41:16 26 4
gpt4 key购买 nike

让我们考虑 Property 接口(interface)的两种方法:

Property#unbind() 
Property#unbindBidirectional(Property<T> other)

正如我们所见,当我们想要删除双向绑定(bind)时,我们可以传递要删除此绑定(bind)的属性。

但是,当我们删除单向绑定(bind)时,我们无法传递此类属性。怎么解释呢?

最佳答案

单向绑定(bind)

单向绑定(bind)涉及的方法有 bind , unbind ,和isBound .

重要的是要知道单向绑定(bind)是一对一1。这样做是为了保持一致性。考虑一下如果同时允许多个单向绑定(bind)会发生什么。如果我们有:

AB
AC

应该做什么A包含? B的值或 C 的值? bind的合约要求 Property始终包含 ObservableValue 的值。来自 javafx.beans.property :

All properties can be bound to ObservableValues of the same type, which means that the property will always contain the same value as the bound ObservableValue.

Property如果有多个,则无法维持此契约(Contract) ObservableValue观察。因此,强制执行一对一1关系。

由于这种一对一1关系,没有必要传递 ObservableValue调用unbind时。唯一可能ObservableValue这可能意味着之前通过 bind 给出的内容.

值得一提的是,调用bind在已经绑定(bind)的Property上将隐式与之前的 ObservableValue 解除绑定(bind)。至少,标准实现是这样工作的。我找不到定义此行为的文档,因此我认为实现可能会引发异常。

1。从技术上讲,这是一种多对一关系。多个Property可以绑定(bind)到相同的ObservableValue ,但是那个Property不能绑定(bind)到多个 ObservableValue 。不过,我在答案中保留了“一对一”,因为我认为它更好地说明了单向绑定(bind)和双向绑定(bind)之间的区别。

双向绑定(bind)

双向绑定(bind)涉及的方法有 bindBidrectionalunbindBidirectional .

对于双向绑定(bind),关系是多对多。它们也独立于单向绑定(bind)。来自 bindBidirectional :

Create a bidirectional binding between this Property and another one. Bidirectional bindings exists independently of unidirectional bindings. So it is possible to add unidirectional binding to a property with bidirectional binding and vice-versa. However, this practice is discouraged.

It is possible to have multiple bidirectional bindings of one Property.

双向绑定(bind)允许这种多对多关系,因为它们会导致每个 Property互相镜像。如果其中一个发生变化,另一个也会更新。来自 javafx.beans.property :

It is also possible to define a bidirectional binding between two properties, so that both properties always contain the same value. If one of the properties changes, the other one will be updated.

这意味着双向绑定(bind)不会共享单向绑定(bind)所存在的一致性问题。考虑以下因素:

ABC

如果A更改,然后B将会更新。因为B已更新,C也会更新。这意味着在任何给定时间所有属性都具有相同的值。没有歧义。

由于这种多对多关系,目标 Property解绑时需要;界限Property需要知道哪个 Property它需要解除绑定(bind)。

关于java - 为什么我们不能将属性作为参数传递给 JavaFX 中的 Property#unbind() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52904668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com