2016-12-06 56 views
-1

編輯:我創建了一個帶有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但我厭倦了尋找答案:/ 任何幫助,將不勝感激。

+0

創建一個顯示問題的[MCVE]。你發佈的代碼沒有問題,但是有很多關鍵的東西缺失(將表視圖注入控制器,將表視圖與可觀察列表連接等)。如果你創建了一個MCVE,你保證你發佈的代碼包含你的錯誤。 –

+0

明天我將搭建一個github項目,今天太累了;) –

+0

不,請不要在代碼中發佈外部鏈接。正如我在之前的評論中所說的那樣,創建一個剛好足夠(並且不超過必需)來演示問題的[MCVE],並將該示例直接發佈到您的問題中。 –

回答

-1

這不是解決問題的正確途徑,但現在速戰速決,你應該嘗試以下方法:

yourTableView.getColumns().get(0).setVisible(false); 
    yourTableView.getColumns().get(0).setVisible(true); 

我從我的項目,知道的問題,我無法找到一個更好的解決辦法。但是,這裏應該有助於在屏幕上「刷新」你的表格。

0

發現我的問題,我的ViewModel未被授權@Singleton