TornadoFx ItemViewModel项目为空

我有课

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

机智的itemViewmodel类

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

我试图在我的视图绑定数据从textfields / combox到我的PatientModel对象像这样

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

但最后我调用model.item它是空的。

我需要做什么才能获得data class Patient对象? 不是视图模型。 谢谢

One Solution collect form web for “TornadoFx ItemViewModel项目为空”

您需要将item设置到ViewModel 。 为了给它一个新的实例,做model.item = Patient(...) 。 尽管你不一定需要这样做。

患者实例也可以传递给ViewModel超级构造函数来自动设置item属性:

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

请注意,您需要一个无参数构造函数才能在注入时使用您的视图模型。

由于您的Patient类是不可变的,因此ViewModel无法自动将数据写回到其中。 为了解决这个问题, onCommitViewModel重写onCommit ,并根据当时ViewModel属性中的值为item属性指定一个新值。

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

JavaFX可观察属性旨在与可变数据结构一起使用,因此您必须跳过一些额外的箍环以使用不可变的值。

  • TornadoFX JavaFX Sync跨桌面浏览
  • 如何用java 7运行龙卷风fx hello world 7
  • TornadoFX:标签文字没有更新
  • 如何在Kotlin中实现TornadoFX WebEngine回调
  • Kotlin和TornadoFX:将一个可观察的属性绑定到一个集合函数?
  • tornadoFX togglebutton没有文本属性
  • 如何用列填充可用的tableview宽度?
  • 为什么我的场景是空的?
  • 尝试运行TornadoFX应用程序时发生java.lang.NoSuchMethodException
  • TornadoFX与TestFX在每个TestCase之后关闭视图
  • 如何用Kotlin和Tornado FX设置Gluon应用程序
  • Kotlin language will be the best programming language for Android.