BooleanBinding с проблемой selectionModelProperty - PullRequest
0 голосов
/ 24 октября 2018

У меня есть панель с текстовым полем, полем со списком и кнопкой.Я хочу, чтобы эта кнопка была включена только тогда, когда в текстовом поле есть какое-то значение, а в комбо-элементе выбран какой-то элемент, и отключена, если нет.По умолчанию комбо не имеет выбора.Я пытался с этим:

button.disableProperty().bind(Bindings.createBooleanBinding(() ->
  (combo.getSelectionModel().getSelectedIndex() == -1) || 
    textfield.getText().trim().isEmpty(),
  textfield.textProperty(),
  combo.selectionModelProperty()
));

, но не работает.Если я удаляю combo.selectionModelProperty (), кнопка включает и отключает корректность в соответствии с содержимым текстового поля, поэтому кажется, что combo.selectionModelProperty () не обнаруживает изменение элемента в комбинированном списке.Есть ли какой-либо другой способ прослушивания изменений в элементах?

1 Ответ

0 голосов
/ 24 октября 2018

Модель выбора ComboBox сама может быть заменена, но это необычно и потребует от вас замены.Вы пытаетесь прослушать свойство selectedIndex SelectionModel, поэтому вам следует использовать

combo.getSelectionModel().selectedIndexProperty()

или лучше использовать свойство ComboBox.value:

button.disableProperty().bind(Bindings.createBooleanBinding(
    () -> (combo.getValue() == null) || textfield.getText().trim().isEmpty(),
    textfield.textProperty(),
    combo.valueProperty()
));
...