Как «сгладить» свойство ObjectProperty объекта ObjectProperty в TornadoFX (расширение JavaFX)?

#java #javafx #kotlin #tornadofx

#java #javafx #kotlin #tornadofx

Вопрос:

Допустим, у меня есть три класса:

 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)
  

Как вы, возможно, видели, в классе A я хочу иметь cObservable , который обновляет свое значение либо при bProperty изменении значения, либо при изменении значения cProperty в текущем bProperty.value .

Ближе всего я подошел к чему-то вроде этого:

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

Но это дает мне ObservableValue ObservableValue C ObservableValue , а не C оф- оф -оф. Так что я не могу с этим работать.

Заранее спасибо за вашу помощь.

Ответ №1:

Вы можете использовать select метод расширения:

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

или:

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