Привязка LongProperty к внутренним изменениям ListProperty - PullRequest
0 голосов
/ 16 октября 2019

У меня есть три класса:

class A { 
    //Duration in seconds
    private val durationProperty = SimpleLongProperty(300)
    var duration by durationProperty
}
class B(list: List<A>) {
    private val aClassesProperty = SimpleListProperty(list.observable())
    val aClasses by aClassesProperty
}
class C(classB: B, repetitions: Int){
    private val bClassProperty = SimpleObjectProperty(classB)

    private val repetitionsProperty = SimpleIntProperty(repetitions)
    val repetitions by repetitionsProperty
}

Теперь я хотел бы создать и связать durationProperty внутри class B как сумму class A durationProperty (который будет чувствителен к добавлению нового экземпляра class A в список и изменению любой продолжительности уже существующего экземпляра) и аналогично в class C - durationProperty при длительности classB, умноженной на repetitions.

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Я не знаю, kotlin, но ответ должен быть простым для перевода.

Вам нужно использовать 'экстрактор', чтобы справиться с этим, используя:

FXCollections#observableArrayList(Callback<E, Observable[]> extractor)

Например:

ObservableList<A> list = FXCollections.observableArrayList(item -> new Observable[] {item.durationProperty});

list.addListener((InvalidationListener) observable -> {
    //Update you sum here
});

Экстрактор вызывает любые изменения в указанном наблюдаемом массиве каждого элемента в списке, чтобы инициировать как InvalidationListener, так и ListChangeListener списка.

0 голосов
/ 17 октября 2019

Решение SephB правильное, но в конце концов я использовал одно из t здесь . Я нашел его немного более эластичным, хотя там много шаблонов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...