我有一本包含规则的规则手册:
class Rulebook(val rules:MutableList<Rule>)
我有一个ItemViewModel,因为它用于多重嵌套选择UI。
class RulebookModel : ItemViewModel<Rulebook> {
val rulesProperty = bind // ... here's my problem
}
能够使用该属性初始化表格视图的正确绑定是什么?
天真绑定会产生错误的类型:
val rulesProperty = bind(Rulebook::rules)
具有类型Property<MutableList<Rule>>
,而tableview()则不需要。
从另一个答案中,我得到了Link
val rulesProperty = bind(Rulebook::rules) as ListProperty<Rule>
这会产生正确的类型,因此我们进行了编译,但是在运行时我得到了:
java.lang.ClassCastException:无法将java.util.ArrayList强制转换为javafx.collections.ObservableList
注意:RulebookModel
确实可以在没有任何物品的情况下开始生活。我以前见过ArrayLists
来自空列表工厂调用。那可能是我的实际问题吗?
执行此绑定的正确方法是什么?
答案 0 :(得分:0)
您的模型需要具有一个SimpleListProperty才能绑定到itemViewModel中 这是一些有关如何编写类和表视图的示例代码:
data class rule(val name: String, val def: String)
class RuleBookModel{
val rulesProperty = SimpleListProperty<rule>()
var rules by rulesProperty
}
class RuleBookViewModel: ItemViewModel<RuleBookModel>() {
val rules = bind(ruleBook::rulesProperty)
}
class TestView : View("Test View") {
val myRuleBook: RuleBookViewModel by inject()
init {
// adding a rule so the table doesn't look lonely
myRuleBook.rules.value.add(rule("test", "fuga"))
}
val name = textfield()
val definition = textfield()
override val root = vbox{
hbox {
label("Name")
add(name)
}
hbox {
label("Definition")
add(definition)
}
button("Add a rule").action{
myRuleBook.rules.value.add(rule(name.text, definition.text))
}
tableview(myRuleBook.rules) {
column("name", rule::name)
column("def", rule::def)
}
}
}