【发布时间】:2017-11-16 17:09:31
【问题描述】:
我有一种情况,我需要根据项目的某些属性(即条件是内部而不是外部)过滤 ObservableList<Item>。我发现 javafx 有FilteredList 所以我试了一下。我可以设置谓词和过滤工作,直到确定过滤的属性值发生变化。现在设置谓词如下:
list.setPredicate(t -> !t.filteredProperty().get())
由于谓词返回 boolean 而不是 BooleanProperty,因此对该属性的更改不会反映在列表中。
有什么简单的解决方法吗?我可以尝试做一些解决方法,例如创建一个单独的列表并同步它,或者每次在一个项目中的属性更改时重置谓词,希望重新触发过滤,但我首先想问一下,以防有人知道一个很好的解决方案,因为这些解决方法肯定不是。
【问题讨论】:
-
更改房源时,再次拨打
list.setPredicate(t -> !t.filteredProperty().get())即可。 -
感谢您的想法。该列表是模型的一部分,只要有新数据就会更新。显示数据的视图不知道何时发生这种情况,但我想我可以以某种方式将其作为模型中的一个事件......我想没有实际的方法可以从列表中做这种事情,因为我需要添加例如列表中每个项目/属性的 InvalidationListener。
-
FXCollections有一个工厂方法可以为你创建这样一个失效监听器。