I want my included/embedded fxml-based controls to inform their containing objects (parent views) about changes in their states/properties. As you can see below I wrote a Container.fxml including a View.fxml plus the according to controller classes, named "Container.java" and "View.java".
When the textField of ViewController.java changes, its StringProperty 'textProperty_View' is updated. That seems to be working properly as the OnAction-handler is invoked as expected.
But the listener in the parent ContainerController.java does not fire though I bound its StringProperty to the StringProperty of ViewController.java and added a ChangeListener for this property.
What am I doing wrong?
P.S.:
- I simplified the example by doing the same thing without fx:includeto see if the binding works. It works. But not when I embed the view like in the described problem (see code below)
- Am using javafx-15-ea+3 and java11
AppStarter.java
public class AppStarter extends Application {
    public static void main(String[] args) {
        launch(args);
    }
    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("/fxml/Container.fxml"));
        Scene scene = new Scene(root, 300, 275);
        stage.setScene(scene);
        stage.show();
    }
}
ContainerController.fxml
<HBox xmlns="http://javafx.com/javafx/10.0.2-internal" 
      xmlns:fx="http://javafx.com/fxml/1"
      fx:controller="gui.ContainerController">
      <fx:include source="View.fxml" fx:id="view"/>
<!-- <TextField fx:id="textFieldMain" prefWidth="200" onAction="#onActionMain"/>  -->
</HBox>
ContainerController.java
public class ContainerController implements Initializable {
    private final StringProperty textProperty_Main = new SimpleStringProperty();
    @FXML
    private ViewController viewController;
//    @FXML
//    void onActionMain(ActionEvent event) {
//        System.out.println("onActionMain " + viewController.getTextProperty_View());
//    }
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        textProperty_Main.bind(viewController.textProperty_ViewProperty());
        textProperty_MainProperty().addListener((observable, oldValue, newValue) ->
                System.out.println("textProperty of Container changed to: " + getTextProperty_Main())
        );
    }
    public String getTextProperty_Main() {
        return textProperty_Main.get();
    }
    public StringProperty textProperty_MainProperty() {
        return textProperty_Main;
    }
}
View.fxml
<HBox xmlns="http://javafx.com/javafx" 
      xmlns:fx="http://javafx.com/fxml" 
      fx:controller="gui.ViewController">
     <TextField fx:id="textField" prefWidth="200" onAction="#onAction">Unset</TextField>
</HBox>
ViewController.java
public class ViewController {
    private final StringProperty textProperty_View = new SimpleStringProperty();
    @FXML
    private TextField textField;
    @FXML
    void onAction(ActionEvent event) {
        textProperty_ViewProperty().setValue(textField.getText());
        System.out.println("textProperty of View changed to: " + textProperty_ViewProperty().getValue());
    }
    public String getTextProperty_View() {
        return textProperty_View.get();
    }
    public StringProperty textProperty_ViewProperty() {
        return textProperty_View;
    }
}
 
    