Javafx 将LongProperty绑定到ListProperty的内部更改

Javafx 将LongProperty绑定到ListProperty的内部更改,javafx,kotlin,tornadofx,Javafx,Kotlin,Tornadofx,我有三门课: class A { //Duration in seconds private val durationProperty = SimpleLongProperty(300) var duration by durationProperty } 现在,我想在class B中创建并绑定durationProperty,作为class AdurationProperty的总和(这将敏感地将新的class A实例添加到列表中,并更改现有实例的任何持续时间)同样地

我有三门课:

class A { 
    //Duration in seconds
    private val durationProperty = SimpleLongProperty(300)
    var duration by durationProperty
}

现在,我想在
class B
中创建并绑定
durationProperty
,作为
class A
durationProperty
的总和(这将敏感地将新的
class A
实例添加到列表中,并更改现有实例的任何持续时间)同样地,在
C类
-
持续时间属性
中,
B类
的持续时间乘以
重复次数
我不知道kotlin,但答案应该很容易翻译

您需要使用“提取器”来处理此问题,使用:

FXCollections#observableArrayList(Callback<E, Observable[]> extractor)
FXCollections#observableArrayList(回调提取器)
比如:

observeList list=FXCollections.observearraylist(item->newobserveable[]{item.durationProperty});
list.addListener((InvalizationListener)可观察->{
//在这里更新你的总数
});

提取器会导致对列表中每个项的给定可观察数组的任何更改,从而触发要激发的列表的InvalizationListener和ListChangeListener。

我不知道kotlin,但答案应该很容易翻译

您需要使用“提取器”来处理此问题,使用:

FXCollections#observableArrayList(Callback<E, Observable[]> extractor)
FXCollections#observableArrayList(回调提取器)
比如:

observeList list=FXCollections.observearraylist(item->newobserveable[]{item.durationProperty});
list.addListener((InvalizationListener)可观察->{
//在这里更新你的总数
});

提取器会导致对列表中每个项的给定可观察数组进行任何更改,从而触发要激发的列表的InvalizationListener和ListChangeListener。

SephB的解决方案是正确的,但最后我使用了t。尽管有很多样板,但我发现它更有弹性。

SephB的解决方案是正确的,但最后我使用了t。我发现它有点弹性,尽管有很多样板。

这是一个评论而不是一个答案-请考虑把它作为评论在另一个答案下面:)这是一个评论而不是一个答案-请考虑把它作为评论在另一个答案下:
FXCollections#observableArrayList(Callback<E, Observable[]> extractor)
ObservableList<A> list = FXCollections.observableArrayList(item -> new Observable[] {item.durationProperty});

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