JavaFx:双向绑定,在 TableView 中选择值

JavaFx: Bidirectional Binding, selected value in TableView

我需要一些帮助,我正在尝试使用一些标签和文本字段绑定模型中对象的属性。

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

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

我通过 Bindings 帮助解决了这个问题 class:

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

只有在 Bindings 帮助下 class 标签的文本才能正确绑定到对象的名称 -属性。

现在我正在尝试通过双向绑定获得相同的结果。有人有什么想法吗?

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

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

ChangeListener for 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。因此无需关心删除列表项。