编辑:我创建了一个带有PropertyValueFactory的cellValueFactory的TableView,但是当我更新表示TableView的数据的ObservableList时,我的TableView不会更新。我相信,通过readNctsvorgaenge()创建新的更新列表,并包含和附加Item.This与mvvmfx实施 - > moodel视图视图模型javaFX TableView不更新,即使数据列表更新
这是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));
}
}
和的DataModel为TableView中是...
public class MonitorNctsvorgangTableViewModel {
private final Nctsvorgang nctsvorgang;
public MonitorNctsvorgangTableViewModel(Nctsvorgang nctsvorgang) {
this.nctsvorgang = nctsvorgang;
}
public String getBezugsnummer() {
return nctsvorgang.getBezugsnummer();
}
}
我的视图模型
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
}
所以我不知道为什么我的TableView中没有更新/刷新,当我读了不同的ObservaleList到ObservaleList。 我正在关注一个示例(mvvmFX联系人示例),我非常肯定代码与示例中的代码相同。我坚持了几天,谷歌搜索没有解决我的问题,这让我感到疯狂。对不起,如果双Post但我厌倦了寻找答案:/ 任何帮助,将不胜感激。
创建一个显示问题的[MCVE]。你发布的代码没有问题,但是有很多关键的东西缺失(将表视图注入控制器,将表视图与可观察列表连接等)。如果你创建了一个MCVE,你保证你发布的代码包含你的错误。 –
明天我将搭建一个github项目,今天太累了;) –
不,请不要在代码中发布外部链接。正如我在之前的评论中所说的那样,创建一个刚好足够(并且不超过必需)来演示问题的[MCVE],并将该示例直接发布到您的问题中。 –