CellCache在TableView中用tornadoFX意外渲染

我只是困惑于与KotlincellCache函数的使用。 渲染总是奇怪而且意想不到,那会发生什么? 代码在这里:

 data class Person(var name : String, var age : Int, var sex : Boolean) class MyView: View() { val list = listOf( Person("Name A", 20, false), Person("Name B", 22, false), Person("Name C", 21, true), Person("Name D", 30, true), Person("Name E", 35, true) ).observable() override val root = stackpane { vbox { tableview(items = list) { column("Name", Person::name) column("Age", Person::age) column("Sex", Person::sex).cellCache{ checkbox{ isSelected = it setOnAction { println("Selection: $isSelected") } } } } } } } 

我希望所有的行都会在"Sex"列中显示一个checkbox ,但是上面的代码只会显示两个:一个selected ,另一个unselected ,这个cellcache到底在cellcache什么? 我也发现改变data class与下面的一个,这是正确的:

 data class Person(var name : String, var age : Int, var sex : SimpleBooleanProperty) 

不过,我必须用这种方式改变数据类属性,我也不知道为什么。 帮助我,并提前感谢!

cellCache在列表中为每个项目创建一个唯一的单元格。 如果您的项目没有实现有意义的equalshashCode函数,那么您将遇到cellCache问题,因为同一个单元格将用于多个基础项目。

添加equalshashCode实现,确保每个项目是唯一的应该解决问题。 似乎Kotlin数据类中的默认实现不会削减它:)

如果你不能或不会提供equalshashCode实现,我会建议使用cellFormat来代替,它不依赖于对象相等来产生一个唯一的单元格。

对不起,这在指南中没有说清楚,我将更新TableView部分,提供更多信息并警告使用cellCache