热到 "flatten" TornadoFX(JavaFX 扩展)中 ObjectProperty 的 ObjectProperty?

Hot to "flatten" an ObjectProperty of an ObjectProperty in TornadoFX (JavaFX extension)?

假设我有三个 classes:

class A {
    val bProperty: ObjectProperty<B> = SimpleObjectProperty(B(C("test")))

    val cObservable: ObservableValue<C> = ???
}

class B(initialC: C) {
    val cProperty: ObjectProperty<C> = SimpleObjectProperty(initialC)
}

class C(val string: String)

如您所见,在 class A 中,我想要一个 cObservable,它会在 [=14 的值时更新其值=] 更改或当前 bProperty.valuecProperty 的值更改时。

我最接近的是这样的:

val cObservable: ObservableValue<ObjectProperty<C>> = nonNullObjectBinding(bProperty) {
        value.cProperty
    }

但这给了我 ObservableValueObservableValueC 而不是 ObservableValueC.所以我无能为力。

提前感谢您的帮助。

您可以使用select扩展方法:

val cObservable: ObservableValue<C> = bProperty.select { it.cProperty }

或:

val cObservable: ObservableValue<C> = bProperty.select (B::cProperty)