JavaFx:双向绑定,TableView

时间:2017-05-07 21:29:05

标签: javafx properties binding tableview bidirectional

我需要一些帮助,我试图将模型中对象的属性与某些标签和文本字段绑定。

label1.textProperty().bind(myModel.getSelectedObject().getNameProperty());

在这种情况下,getSelectedObject()是TableView中的选定对象。不知怎的,这不能按预期工作。当模型的值发生变化时,标签不会改变。

我使用Bindings帮助类进行管理以解决此问题:

label1.textProperty().bind(Bindings.select(myModel.getSelectedObject(), "name"));

只有Bindings帮助类,标签的文本才能正确绑定到对象的name-property。

现在我试图通过双向绑定获得相同的结果。任何想法?

如果我像这样绑定它,它没有效果(与第一个代码剪切相同)

textField.textProperty().bindBidirectional(myModel.getSelectedObject().getNameProperty());

1 个答案:

答案 0 :(得分:1)

ChangeListener允许SelectionModel启用切换绑定。尝试一下。

tableView.getSelectionModel().selectedItemProperty().addListener((o, ov, nv) -> {
    if (ov != null) textField.textProperty().unbindBidirectional(ov.nameProperty());
    if (nv != null) {
        textField.setDisable(false);
        textField.textProperty().bindBidirectional(nv.nameProperty());
    } else {
        textField.setDisable(true);
        textField.setText("");
    }
});

注:

如果从TableView的项目中删除了所选项目,则调用此ChangeListner并将已删除的项目调用为oldValue而不是null。所以不需要关心删除列表项。