TornadoFX ItemViewModel se actualiza si se cambia el object de respaldo que no expone las properties de JavaFX

Tengo un código siguiente

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()] } } 

Después de hacer clic en el button, la model.itemProperty cambia pero el model.status no. Llamar a model.rollback() funciona, pero supongo que no es la forma ItemViewModel actualizar ItemViewModel después de que se ItemViewModel propiedad de respaldo. ¿Hay alguna manera de UserModel actualizar el UserModel (y la vista correspondiente como resultado) sin asignar un nuevo object de User al model.item ?

Cuando su object de respaldo no es observable, llamar a rollback() es exactamente lo que debe hacer. La semántica se ajusta perfectamente a su caso de uso, ya que la reversión asegura que su ViewModel coincida con los valores del object de respaldo ya asignado.

En su caso, usted sabe qué ha cambiado, así que si desea mantener los valores existentes tal como están y solo actualizar el estado, podría ser muy pragmático al respecto:

 model.status.value = model.item.status 

Personalmente, siempre utilizo valores observables cuando puedo, no agregan mucho text repetitivo con la nueva syntax, y te permiten escribir tu código de una manera mucho más declarativa. Para completar, así es como declarará el status como una propiedad observable en User :

 val statusProperty = SimpleBooleanProperty() var status by statusProperty 
  • tornadoFX togglebutton no tiene propiedad de text
  • TornadoFX filechooser
  • java.lang.NoSuchMethodException cuando intenta ejecutar la aplicación TornadoFX
  • ¿Cómo cancelar la suscripción a events en TornadoFX?
  • Cómo implementar TornadoFX WebEngine Callback en Kotlin
  • Las properties vinculadas no funcionan
  • Columnas de tabla dinámica
  • Cómo crear una pantalla de inicio en tornadofx
  • Cómo configurar una aplicación Gluon con Kotlin y Tornado FX
  • En TornadoFX, ¿cómo puedo hacer que una propiedad cambie cuando cambian otras properties?
  • TornadoFX: Type-Safe CSS con otras bibliotecas