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。因此无需关心删除列表项。
我需要一些帮助,我正在尝试使用一些标签和文本字段绑定模型中对象的属性。
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。因此无需关心删除列表项。