我有一个填充结果列表的工人。 ListView绑定到此结果列表,并在可用时立即填充部分结果。效果很棒!
然后有一个按钮可以处理列表中的项目。因此,只要列表为空,就应该禁用它。这适用于其他所有列表。但不适合这个。
我通过剥离UI组件并仅使用属性来减少了示例。结果是一样的。要么存在某种错误,要么我不明白绑定是如何工作的。
我希望对此有任何帮助评论。
只需将此代码放入main()方法中即可看到问题。我使用的是Java 1.8 Update 74。
def method():
string = """\
line one
line two
line three\
"""
答案 0 :(得分:0)
绑定是针对items
进行的,仅适用于items
。这意味着只有在替换列表时才会更新值,但如果只修改它则不会更新。
要通知items
包含的列表中的更改,每次更换列表时都需要将属性绑定到列表的“空白条件”:
items.addListener((observable, oldValue, newValue)-> {
if (newValue == null) {
disabled.unbind();
disabled.set(true);
} else {
disabled.bind(Bindings.isEmpty(newValue));
}
});
或更简单 - 使用ListProperty
:
ListProperty<String> items = new SimpleListProperty<>();
disabled.bind(Bindings.isEmpty(items));
Bindings.createXYZBinding(callable, o1, 02, ..., oN)
创建一个XYZBinding
,用于缓存callable
在评估时返回的值。评估是懒惰的,即当绑定很脏时:
get
ChangeListener
,且绑定变脏了绑定很脏,如果
o1
,...,oN
的其中一个侦听器收到更改事件。如果评估callback
,绑定会再次变得干净(即不脏)。
绑定缓存callback
评估的结果,并在调用get
或需要将数据传递给ChangeListener
时使用此结果。只有在评估后,才会调用监听器,缓存的值会发生变化。