TornadoFX Обновление ItemViewModel, если объект Backing, не отображающий свойства JavaFX, изменен

У меня есть следующий код

class MainView : View("Example") { val model: UserModel = UserModel() init { model.item = User(status = true) } override val root = vbox { useMaxWidth = true label(model.status) button("Get new status") { action { model.item.updateStatus() println("Status in model: ${model.status.value}") println("Status in backing object: ${model.item.status}") } } } } class User(var status: Boolean, val api: Api = Api()) { fun updateStatus() { status = api.getStatus() } } class UserModel : ItemViewModel<User>() { val status = bind(User::status) } class Api { fun getStatus(): Boolean { val list = listOf(true, false) return list[(Math.random() * list.size).toInt()] } } 

После нажатия кнопки model.itemProperty изменяется, но model.status нет. Вызов model.rollback() делает трюк, но я полагаю, что это ItemViewModel обновить ItemViewModel после изменения свойства. Есть ли способ TornadoFX обновить UserModel (и соответствующий View в результате) без назначения нового объекта User для model.item ?

Когда ваш вспомогательный объект не является наблюдаемым, вызов rollback() – это именно то, что нужно сделать. Семантика идеально подходит для вашего использования, так как откат гарантирует, что ваш ViewModel соответствует значениям в уже назначенном объекте поддержки.

В вашем случае вы знаете, что изменилось, поэтому, если вы хотите сохранить существующие значения в том виде, в каком они есть, и только обновить статус, который вы, возможно, также прагматичны:

 model.status.value = model.item.status 

Лично я всегда использую наблюдаемые значения, когда могу, они не добавляют много шаблонов с новым синтаксисом, и они позволяют вам писать свой код гораздо более декларативным образом. Для полноты, так вы объявляете status как наблюдаемое свойство в User :

 val statusProperty = SimpleBooleanProperty() var status by statusProperty 
Intereting Posts
Micro web-framework для Kotlin Ошибка Required Nothing при определении нулевой локальной переменной и ее установка позже в методе transformClassesWithDesugar построить ошибку после обновления до AS 3.0 Canary 6 Вывод лямбда-типа Java не работает должным образом в Котлине Как реорганизовать представление, чтобы разрешить фильтрацию элементов, привязанных к наблюдаемомуArrayList, внутри приложения tornadofx Kotlin SAM Ошибка выполнения: NoSuchMethodError: Нет статического метода Как отображать данные с использованием дерева дерева TornadoFX «Не удалось запустить активность» в тесте эспрессо Невозможно использовать библиотеку kotlin Android Kotlin – Как настроить методы настройки Java-конструктора Kotlin Построить на travis-CI, но тесты не запускаются Пользовательское поведение макета MissingMethodInvocationException тестирование открытого класса в Котлине Kotlin mutableList () возвращается с карты :: getOrElse не выставляет add () Если isConnected возвращает true, почему Exeption говорит, что он не подключен?