JavaFX双向绑定-FXML

JavaFX双向绑定-FXML,java,javafx,binding,fxml,Java,Javafx,Binding,Fxml,据我所知,可以绑定一个属性并从控制器读取它的值,它可以处理标签之类的只读字段,但不能处理文本框 FXML: 使用此策略,我无法从用户界面设置文本框值 从FXML文档中删除绑定并在控制器端添加绑定可以正常工作: FXML: 但我不喜欢这个解决方案,因为我想解耦控制器和FXML 我的问题是:是否可以在控制器端设置绑定而不设置双向绑定 连接模型和表示层的最佳设计模式是什么?否。控制器和FXML“耦合”不是FXML/控制器概念的全部要点吗?但是,无论采用哪种方式,您都无法使用straight FXML创

据我所知,可以绑定一个属性并从控制器读取它的值,它可以处理标签之类的只读字段,但不能处理文本框

FXML:

使用此策略,我无法从用户界面设置文本框值

从FXML文档中删除绑定并在控制器端添加绑定可以正常工作:

FXML:

但我不喜欢这个解决方案,因为我想解耦控制器和FXML

我的问题是:是否可以在控制器端设置绑定而不设置双向绑定


连接模型和表示层的最佳设计模式是什么?

否。控制器和FXML“耦合”不是FXML/控制器概念的全部要点吗?但是,无论采用哪种方式,您都无法使用straight FXML创建所需的双向绑定。那么JavaFX/FXML应用程序的建议设计模式是MVC吗?还有什么?这是MVC。正确地说,FXML是视图,它不应该关心值,而是控制器的工作,以确保值是正确的。因此,理想情况下,您甚至不应该在FXML中进行绑定。此外,视图不应该知道MVC中的控制器,因此您给出的示例绑定已经是一个非常糟糕的想法。FXML中的绑定应该保持在FXML自身定义的节点之间的绑定上。我刚刚进入JavaFX,这一切看起来都是一个非常有问题的设计决策。我真的看不出为了支持双向绑定而强迫控制器自己填充GUI小部件是多么的接近“MVC”,如果说它是MVP的话。您应该如何对控制器进行单元测试?早在2013年,开发人员就将在视图中实现双向数据绑定列为他们的最高优先事项之一,但现在我们仍然。。。。
<TextField text="${controller.userName}" />
private final StringProperty userName = new SimpleStringProperty();
public StringProperty userNameProperty() {
    return userName;
}
<TextField fx:id="userNameTextField" />
private final StringProperty userName = new SimpleStringProperty();

@FXML
private TextField userNameTextField;

@FXML
void initialize() {
    userNameTextField.textProperty().bindBidirectional(userName);
}