編輯:我創建了一個帶有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],並將該示例直接發佈到您的問題中。 –