class MyApp : WorkspaceApp(MyView::class) class MyView : View("Dirty Editin'") { val controller: CustomerController by inject() var table: TableView by singleAssign() override val root = tableview(controller.customers) { table = this column("ID", Customer::idProperty) column("LAST NAME", Customer::firstNameProperty).makeEditable() column("FIRST NAME", Customer::lastNameProperty).makeEditable() enableCellEditing() regainFocusAfterEdit() enableDirtyTracking() savableWhen { editModel.selectedItemDirty } refreshableWhen { editModel.selectedItemDirty } } override fun onSave() { table.editModel.commitSelected() } override fun onRefresh() { table.editModel.rollbackSelected() } }