即使数据列表已更新,javaFX TableView也不会更新

时间:2016-12-06 17:01:24

标签: javafx tableview refresh

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联系人示例),我很确定代码与示例中的代码相同。我坚持了几天,谷歌搜索没有解决我的问题,这让我感到疯狂。对不起,如果双帖但我厌倦了寻找答案:/ 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

发现我的问题,我的ViewModel不是Annotaed @Singleton