Я хочу иметь окно, которое показывает информацию об определенных ViewModel
Предположим, у вас есть простой Person:
class Person(name: String) {
val nameProperty = SimpleStringProperty(name)
}
и сохраните экземпляр Person в свойстве:
val personProperty = SimpleObjectProperty(Person("John"))
какое правильное решение для отображения имени человека в ярлыке?
Используя это:
label(personProperty.value.nameProperty)
Не будет обновляться, когда я обновлю лицо свойства:
personProperty.value = Person("Joe")
(Это очевидно, потому что меняется только ссылка, а не само значение)
Итак, есть ли хороший способ сделать это или мне нужно вручную добавить слушателей для personProperty и обновить, на что Person указывает ярлык?
Обновлено: Я также нашел этот вопрос: Привязка JavaFX и изменение свойства, но он не содержит ничего нового и полезного, о чем я не знал, есть ли какой-либо специфичный для TornadoFX способ сделать это?





Слушатель может быть присоединен к свойству:
personProperty.onChange {
it?.nameProperty.let(nameLabel.textProperty().bind)
}
Это можно обернуть в функцию расширения, чтобы упростить задачу.
Это именно то, что ItemViewModel делает для вас. Если вы хотите сделать привязку для свойства имени, которое обновляется автоматически, вне ItemViewModel, вы можете использовать функцию TornadoFX select:
val nameProperty = personProperty.select { it.nameProperty }