据我所知,可以绑定一个属性并从控制器中读取它的值,它可以像标签那样只读字段,但它不适用于文本框。
FXML:
<TextField text="${controller.userName}" />
控制器:
private final StringProperty userName = new SimpleStringProperty();
public StringProperty userNameProperty() {
return userName;
}
使用此策略我无法从用户界面设置文本框值。
从FXML文档中删除绑定并在控制器端添加绑定可以正常工作:
FXML:
<TextField fx:id="userNameTextField" />
控制器:
private final StringProperty userName = new SimpleStringProperty();
@FXML
private TextField userNameTextField;
@FXML
void initialize() {
userNameTextField.textProperty().bindBidirectional(userName);
}
但我不喜欢这个解决方案,因为我想要解耦控制器和FXML。
我的问题是:是否可以通过在控制器端设置绑定来实现双向绑定?
将我的模型与表示层连接的最佳设计模式是什么?