考虑下面的例子:
class Item(name: String, number: Int) {
val nameProperty = SimpleStringProperty(name)
var name by nameProperty
val numberProperty by lazy { SimpleIntegerProperty(number) }
var number by numberProperty
}
class MainView : View("Example") {
val items = listOf(Item("One", 1), Item("Two", 2)).observable()
override val root = vbox {
tableview(items) {
column("Name", Item::nameProperty).makeEditable()
column("Number", Item::numberProperty).makeEditable(NumberStringConverter())
enableCellEditing()
}
}
}
如何在编辑单元格时添加 validator
?唯一的方法是使用 textfield
添加 rowExpander
并尝试在那里验证模型吗?
1 回答
您可以实现自己的cellfactory并返回一个单元格,该单元格在编辑模式下显示绑定到ViewModel的文本字段,如果没有则返回标签 . 或者,如果您总是显示文本字段,则可以使用
cellFormat
并将当前项绑定到ItemModel,以便附加验证:它看起来像这样:
虽然它有效,但由于频繁地重新创建节点,因此它很浪费 . 如果性能是一个问题,我会建议第一个方法,直到我们获得TableView的
cellFragment
支持,就像我们对ListView一样 .EDIT :我实现了
cellFragment
支持,因此可以创建一个更强大的解决方案,当您不进入编辑模式时将显示标签,并在您进入编辑模式时显示验证文本字段 .这可以从TornadoFX 1.7.9开始 .