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.

  • Crea una vista arbitraria
  • TornadoFX - eliminar elemento con ContextMenu hacer clic derecho
  • Columnas de tabla dinámica
  • El text de la label no se actualiza aunque el hilo de la interfaz de usuario parece responder
  • No se puede hacer que el nodo se centre en un StackPane con TornadoFX
  • En TornadoFX, ¿cómo puedo vincular las properties de BigDecimal a otra propiedad de BigDecimal usando objectBinding?
  • ¿Cómo agregar leyenda secundaria al gráfico JavaFX?
  • En TornadoFX, ¿cómo puedo hacer que una propiedad cambie cuando cambian otras properties?
  • TornadoFX - Creación de un layout MVP
  • CellCache se representa inesperadamente en TableView con tornadoFX
  • ¿Cómo llenar el ancho de la tabla disponible con columnas?