JavaFx: двунаправленная привязка, выбранное значение в TableView

Мне нужна помощь, я пытаюсь связать свойства объекта в моей модели с некоторыми метками и текстовыми полями.

label1.textProperty().bind(myModel.getSelectedObject().getNameProperty());

в этом случае getSelectedObject() — это выбранный объект в TableView. Почему-то это работает не так, как ожидалось. Когда значение модели изменяется, метка не меняется.

Мне удалось исправить эту проблему с помощью класса справки Bindings:

label1.textProperty().bind(Bindings.select(myModel.getSelectedObject(), "name"));

Только с помощью класса справки Bindings текст метки правильно привязывается к свойству имени объекта.

теперь я пытаюсь получить тот же результат с двунаправленной привязкой. У кого-нибудь есть идеи?

Если я свяжу это так, это не будет иметь никакого эффекта (так же, как первый код)

textField.textProperty().bindBidirectional(myModel.getSelectedObject().getNameProperty());

person TheGringott    schedule 07.05.2017    source источник


Ответы (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, а не нуль. Так что не нужно заботиться об удалении элемента списка.

person monolith52    schedule 08.05.2017