在 TornadoFX 中,如何在更改其他属性时进行一个 属性 更改?
In TornadoFX, how can I make one Property change when other properties are changed?
例如,我想这样做:我有一个 StringProperty,它是 IntegerProperty 和另一个 StringProperty 的组合,如下所示:
- 字符串属性 A = "foo"
- 整数属性 B = 3
- 结果 StringProperty C = "foo 3"
如何 "bind" 属性,以便在更改 A 或 B 时更改 C? (请注意,我不想对 C 所做的更改做出反应)
我尝试使用 stringBinding()
方法,但我不清楚该方法的具体工作原理,而且相关文档也不清楚。
stringBinding
就是你想要的。第一个参数将在计算块内变为 this
,如果 this
是一个可观察值,它将作为依赖项添加,用于计算何时应重新评估字符串绑定。其余参数(此处仅 b
)也作为 re-evaluation 依赖项添加。
如果您这样做 stringBinding(a, b) { "${a.value} ${b.value}" }
,您就创建了一个字符串绑定,只要 a
或 b
发生变化,该绑定就会更新。由于在上面的例子中 this
是 a
,你也可以写成 stringBinding(a, b) { "${this.value} ${b.value}" }
,但我认为这不会使它更清楚:)
我们决定将第一个元素设为 this
的原因通过以下示例更加明显:
val sizeDescription = bind(items) { "$size elements in list" }
在这里你不需要再次引用 items
来得到它的 size
属性.
例如,我想这样做:我有一个 StringProperty,它是 IntegerProperty 和另一个 StringProperty 的组合,如下所示:
- 字符串属性 A = "foo"
- 整数属性 B = 3
- 结果 StringProperty C = "foo 3"
如何 "bind" 属性,以便在更改 A 或 B 时更改 C? (请注意,我不想对 C 所做的更改做出反应)
我尝试使用 stringBinding()
方法,但我不清楚该方法的具体工作原理,而且相关文档也不清楚。
stringBinding
就是你想要的。第一个参数将在计算块内变为 this
,如果 this
是一个可观察值,它将作为依赖项添加,用于计算何时应重新评估字符串绑定。其余参数(此处仅 b
)也作为 re-evaluation 依赖项添加。
如果您这样做 stringBinding(a, b) { "${a.value} ${b.value}" }
,您就创建了一个字符串绑定,只要 a
或 b
发生变化,该绑定就会更新。由于在上面的例子中 this
是 a
,你也可以写成 stringBinding(a, b) { "${this.value} ${b.value}" }
,但我认为这不会使它更清楚:)
我们决定将第一个元素设为 this
的原因通过以下示例更加明显:
val sizeDescription = bind(items) { "$size elements in list" }
在这里你不需要再次引用 items
来得到它的 size
属性.