2016-12-06 51 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