Javafx 将TextField绑定到ListView项

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

我最近开始使用TornadFX和Kotlin,我被绑定的东西困住了

我可以添加新项目并删除它们<代码>贡献者列表获取新项目,但我无法编辑其项目的内容。如果我不使用
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()