Javafx 将TextField绑定到ListView项
我最近开始使用TornadFX和Kotlin,我被绑定的东西困住了 我可以添加新项目并删除它们<代码>贡献者列表获取新项目,但我无法编辑其项目的内容。如果我不使用Javafx 将TextField绑定到ListView项,javafx,kotlin,tornadofx,Javafx,Kotlin,Tornadofx,我最近开始使用TornadFX和Kotlin,我被绑定的东西困住了 我可以添加新项目并删除它们贡献者列表获取新项目,但我无法编辑其项目的内容。如果我不使用bind(itemProperty())我可以编辑文本字段,但是参与者列表不会更新。如果使用此绑定,则无法编辑文本字段 在主视图中,我像这样打开模式窗口 MainView.kt class MainView : View("Main") { override val root = VBox() private val viewM
bind(itemProperty())
我可以编辑文本字段,但是参与者
列表不会更新。如果使用此绑定,则无法编辑文本字段
在主视图中,我像这样打开模式窗口
MainView.kt
class MainView : View("Main") {
override val root = VBox()
private val viewModel by inject<MainViewModel>()
init {
with(root) {
button("Edit") {
action {
find<ContributorFragment>(
mapOf(ContributorFragment::contributors to
viewModel.contributorProperty)).openModal()
}
}
}
}
}
MainModel.kt
class MainModel {
private var contributor: ObservableList<String> by property()
val contributorProperty = getProperty(MainModel::contributor)
}
类主模型{
私有var参与者:ObservableList by property()
val contributorProperty=getProperty(MainModel::contributor)
}
无需使用参数将视图模型传递给另一个UI组件,只需将其插入贡献者片段即可:
val viewModel: MyViewModel by inject()
现在,您可以以更自然的方式访问viewModel.contributors
,并从代码中删除这些杂乱无章的内容
MainViewModel
中有一些奇怪的命名,这表明您正在将视图模型属性绑定到另一个视图模型中?也许我误解了,但看起来很奇怪
我认为您可以从这个关于TornadoFX中主/细节操作的屏幕广播中获益:
关于非更新问题:我建议将字符串包装在一个模型对象中,并为该字符串添加一个可观察属性。没有它,他们就无法更新。请记住,字符串不是通过引用传递的,因此即使您更改了TextField中的字符串,您也不会在列表中的同一实例上操作。谢谢@Edvin Syse的回复。我通过指定类来更新我的答案,以便更好地理解结构。我使用一个模型和一个视图模型。你发送的视频很棒。但它展示了如何将对象及其属性绑定到文本字段。列表及其动态添加的项目如何。我可以将这些绑定到文本字段吗?是的,在这种情况下,您可以/应该使用ListCellFragment,请参阅Thank@Edvin Syse,ListCellFragment完成了它的工作。
class MainModel {
private var contributor: ObservableList<String> by property()
val contributorProperty = getProperty(MainModel::contributor)
}
val viewModel: MyViewModel by inject()