import tornadofx.* data class Person(val name: String? = null) class PersonModel(person: Person = Person()) : ItemViewModel(person) { val name = bind { item?.name?.toProperty() } } class Setup : Wizard("Setup wizard", "This wizard will guide you through the setup process") { val person: PersonModel by inject() init { add(Step::class) } override fun onSave() { println(person.item) } } class Step : View("Step 1") { val person: PersonModel by inject() override val root = form { fieldset(title) { field("Name") { textfield(person.name).required() } } } override fun onSave() { person.commit() } }