有没有办法将 ObservableList 绑定到 ObservableMap?

Tho*_*ard 6 java javafx arraylist hashmap javafx-8

我以ObservableMap<T, Foo>. 要在视图中实现这些数据,我需要以ObservableList<Foo>.

因为我需要 Map Collection 中的数据(以避免重复和其他原因),我想知道是否可以绑定这两个集合。

就像是:

ObservableMap<Integer, Foo> data = FXCollections.observableHashMap();
ObservableList<Foo> target = FXCollections.observableArrayList();

// Won't work 
Bindings.bindContent(target, data.values());
Run Code Online (Sandbox Code Playgroud)

绑定,因为数据可以在运行时更改。

编辑: 使用地图值初始化列表不起作用,因为将有附加的 Foo 添加到地图中:使用字符串作为地图值的示例:

ObservableMap<Integer, String> map = FXCollections.observableHashMap();
map.put(1, "a");
map.put(2, "b");

ObservableList<String> list = FXCollections.observableArrayList(map.value());

//map = {1=a, 2=b}
//list = [a, b]
// ok

map.put(3, "c");

//map = {1=a, 2=b, 3=c}
//list = [a, b]
// no update    
Run Code Online (Sandbox Code Playgroud)

roh*_*ash 1

从 ObservableMap 到 ObservableList

ObservableMap<Integer, Foo> data = FXCollections.observableHashMap();
ObservableList<Foo> target = FXCollections.observableArrayList(data.values());
Run Code Online (Sandbox Code Playgroud)

  • 我想保持目标更新。一旦用 data.values() 初始化,就不会识别数据的变化。 (2认同)