El elemento TornadoFx ItemViewModel es nulo

tengo class

data class Patient( val birthNumber: String , val firstName: String , val lastName: String , val birthDate: LocalDate , val healthInsurance: InsuranceCompany , val hospitalizations : List<Hospitalization> = emptyList() ) 

ingenio itemViewmodel class

 class PatientModel : ItemViewModel<Patient>() { val birthNumber = bind(Patient::birthNumber) val firstName = bind(Patient::firstName) val lastName = bind(Patient::lastName) val birthDate = bind(Patient::birthDate) val healthInsurance = bind(Patient::healthInsurance) val hospitalizations = bind(Patient::hospitalizations) } 

En mi opinión, bash vincular datos de campos de text / combox a mi object PatientModel como este

  var model = PatientModel() val controller: AddPatientController by inject() override val root = VBox() init { title = "Pridat pacienta" with(root) { goHome() form { fieldset("Personal Information") { field("First name") { textfield().bind(model.firstName) } field("Last Name") { textfield().bind(model.lastName) } field("birthNumber") { textfield().bind(model.birthNumber) } field("InsuranceCompany") { combobox<InsuranceCompany> { items = controller.insuranceComp }.bind(model.healthInsurance) } field("birthDate") { datepicker().bind(model.birthDate) } 

Pero al final cuando llamo a model.item es nulo.

¿Qué debo hacer para get la data class Patient object del data class Patient ? no el model de vista uno. Gracias

ViewModel establecer un item en ViewModel . Para darle una nueva instancia, haga model.item = Patient(...) . Sin embargo, no necesariamente necesitas hacer esto antes de la mano.

También se puede pasar una instancia de paciente al superconstructor de ViewModel para configurar automáticamente la propiedad del item también:

 class PatientModel(patient: Patient) : ItemViewModel<Patient>(patient) 

Sin embargo, tenga en count que necesita un constructor sin arguments para poder usar su model de vista con inyección.

Dado que su class de Patient es inmutable, no hay forma de que ViewModel vuelva a escribir datos automáticamente. Para solucionar esto, anule la onCommit en ViewModel y asigne un nuevo valor a la propiedad del item , según los valores en las properties de ViewModel en ese momento.

 override fun onCommit() { item = Patient(birthNumber.value, ...) } 

Las properties observables de JavaFX están destinadas a ser utilizadas con estructuras de datos mutables, por lo que debe pasar por un par de aros adicionales para usarlos con valores inmutables.

  • Forma de configurar las properties de PrimaryStage o Scene en TornadoFX
  • TableView de Tornadofx usando comboBox y agregando FXEvent en los botones
  • Cómo crear una pantalla de inicio en tornadofx
  • CellCache se representa inesperadamente en TableView con tornadoFX
  • Dibujando líneas desde ViewModel TornadoFX
  • Enlazando una vista a una propiedad de controller cambiante
  • java.lang.ClassNotFoundException: no encontró la class "com.my.app.example.Main" en la ruta: DexPathList
  • ¿Por qué mi escena es nula?
  • TornadoFX ItemViewModel se actualiza si se cambia el object de respaldo que no expone las properties de JavaFX
  • El text de la label no se actualiza aunque el hilo de la interfaz de usuario parece responder
  • ¿Hay alguna manera de vincular una propiedad a appConfig en tornadofx?