我想有一个窗口,其中显示有关某些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 binding and property change,但是它不包含我不知道的任何新的有用的东西,是否有任何特定于TornadoFX的方式?
答案 0 :(得分:3)
ItemViewModel
正是为您执行的操作。如果要为ItemViewModel
之外的自动更新的name属性建立绑定,可以使用TornadoFX功能select
:
val nameProperty = personProperty.select { it.nameProperty }
答案 1 :(得分:0)
可以很容易地将侦听器附加到属性:
personProperty.onChange {
if (it != null) {
nameLabel.textProperty().bind(it.nameProperty)
}
}
肯定可以将其包装在某些扩展功能中以简化任务。