在TornadoFX中,如何更改其他属性时如何更改一个Property?

时间:2017-02-07 11:36:46

标签: java javafx properties kotlin tornadofx

例如,我想这样做:我有一个StringProperty,它是IntegerProperty和anoter StringProperty的组合,如下所示:

  • StringProperty A =“foo”
  • IntegerProperty B = 3
  • 结果StringProperty C =“foo 3”

我如何“绑定”属性,以便在更改A或B时C更改? (请注意,我不想对C)所做的更改作出反应。

我尝试使用stringBinding()方法,但我不清楚这种方法是如何工作的,有关它的文档还不清楚。

1 个答案:

答案 0 :(得分:2)

stringBinding就是你想要的。第一个参数将在计算块内变为this,如果this是可观察值,则它将作为依赖项添加,用于计算何时应重新评估字符串绑定。其余参数(此处仅b)也作为重新评估依赖项添加。

如果您执行stringBinding(a, b) { "${a.value} ${b.value}" },则表示您创建了一个字符串绑定,只要ab发生更改,该字符串绑定就会更新。由于上面示例中的thisa,您也可以使用stringBinding(a, b) { "${this.value} ${b.value}" }编写,但我认为不会让它更清晰:)

我们决定制作第一个元素this的原因通过以下示例更加明显:

val sizeDescription = bind(items) { "$size elements in list" }

此处您无需再次引用items即可获取size属性。