EDITED:我已经使用带有PropertyValueFactory的cellValueFactory创建了TableView,但是当我更新表示TableView数据的ObservableList时,我的TableView将不会更新。我确信readNctsvorgaenge()创建的新列表已更新并包含和附加Item.This是用mvvmfx实现的 - > moodel view viewmodel
这是FXML文件...
<AnchorPane xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cuscus.ui.vorgangnctsmonitor.MonitorNctsvorgang">
<children>
<TableView fx:id="nctsvorgaengeTable"
AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"
AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<columns>
<TableColumn prefWidth="175.0" text="%common.Bezugsnummer">
<cellValueFactory>
<PropertyValueFactory property="bezugsnummer" />
</cellValueFactory>
</TableColumn>
</columns>
</TableView>
</children>
</AnchorPane>
视图的控制器部分:
public class MonitorNctsvorgang implements FxmlView<MonitorNctsvorgangViewModel> {
@FXML
private TableView<MonitorNctsvorgangTableViewModel> nctsvorgaengeTable;
@InjectViewModel
private MonitorNctsvorgangViewModel viewModel;
public void initialize() {
nctsvorgaengeTable.setItems(viewModel.getNctsvorgaenge());
viewModel.selectedTableRowProperty().bind(nctsvorgaengeTable.getSelectionModel().selectedItemProperty());
viewModel.setOnSelect(vm -> nctsvorgaengeTable.getSelectionModel().select(vm));
}
}
并且TableView的DataModel是......
public class MonitorNctsvorgangTableViewModel {
private final Nctsvorgang nctsvorgang;
public MonitorNctsvorgangTableViewModel(Nctsvorgang nctsvorgang) {
this.nctsvorgang = nctsvorgang;
}
public String getBezugsnummer() {
return nctsvorgang.getBezugsnummer();
}
}
我的viewmodel
public class MonitorNctsvorgangViewModel implements ViewModel {
@InjectScope
private NctsvorgangDetailScope detailScope;
@Inject
private CusCusDao cuscusDao;
private final ObservableList<MonitorNctsvorgangTableViewModel> vorgaenge = FXCollections.observableArrayList();
public ObservableList<MonitorNctsvorgangTableViewModel> getNctsvorgaenge() {
return vorgaenge;
}
public void initialize() {
updateNctsvorgaenge();
}
public void onNctsvorgangUpdateEvent(@Observes NctsvorgangUpdatedEvent event) {
updateNctsvorgaenge();
}
private void updateNctsvorgaenge() {
final List<Nctsvorgang> allVorgaenge = cuscusDao.readNctsvorgaenge();
vorgaenge.clear();
allVorgaenge.forEach(vorgang -> vorgaenge.add(new MonitorNctsvorgangTableViewModel(vorgang)));
}
}
Nctsvorgang {
String bezugsnummer;
//getter setter here
}
所以我想知道为什么当我将一个不同的ObservaleList读入ObservaleList时,我的TableView没有更新/刷新。 我正在关注一个例子(mvvmFX联系人示例),我很确定代码与示例中的代码相同。我坚持了几天,谷歌搜索没有解决我的问题,这让我感到疯狂。对不起,如果双帖但我厌倦了寻找答案:/ 任何帮助将不胜感激。
答案 0 :(得分:0)
发现我的问题,我的ViewModel不是Annotaed @Singleton