我需要一些帮助,我试图将模型中对象的属性与某些标签和文本字段绑定。
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());
答案 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。所以不需要关心删除列表项。