java - Java中的MVVM,无需更改模型(及其业务逻辑)
问题描述
在我的业务逻辑模型中,我使用一个带有 ArrayList 的类来存储 Content 类型的对象。一切正常。
但是,我不知道如何将该模型绑定到 ModelView,而不对模型进行任何更改(getter/setter 除外)。
(编辑:)我的意思是:所有与模型相关的类都不能更改为属性(例如 String -> SimpleStringProperty)
是否可以在不更改模型的情况下实现 MVVM(例如将 ArrayList 更改为 ObservableArrayList 等)?
(业务逻辑)模型:
public class Model {
UploaderDB uploaderDB = new UploaderDB();
[...]
public UploaderDB getUploaderDB() {
return this.uploaderDB;
}
}
public class UploaderDBImpl implements UploaderDB {
private List<Uploader> uploaderList = new ArrayList<>();
public List<Uploader> getUploaderList() {
return this.uploaderList;
}
}
public class UploaderImpl implements Uploader {
public String name;
public String getName() {
return this.name;
}
}
模型视图
public class ViewModel {
private ObservableList<Uploader> items;
public ViewModel() {
items = FXCollections.observableArrayList(model.getUploaderDB().getUploaderList());
}
}
视图(MainWindow.java 作为控制器,MainWindow.fxml)
public class MainWindow {
@FXML
private TableView<UploaderDB> uploaderTable;
@FXML public void initialize(URL fxmlFileLocation, ResourceBundle resources {
uploaderTable.itemsProperty().bind(modelView.items);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.control.cell.PropertyValueFactory?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<AnchorPane prefHeight="700.0" prefWidth="1100.0"
xmlns="http://javafx.com/javafx/8.0.172-ea"
xmlns:fx="http://javafx.com/fxml/1" fx:controller="gui.MainWindow">
<children>
<VBox layoutX="14.0" layoutY="14.0" prefHeight="581.0"
prefWidth="662.0">
<children>
<TableView fx:id="uploaderTable" prefHeight="581.0" prefWidth="396.0" >
<columns>
<TableColumn prefWidth="180.0" text="Name" >
<cellValueFactory>
<PropertyValueFactory property="$uploaderName" />
</cellValueFactory>
</TableColumn>
<TableColumn prefWidth="100.0" text="Uploads" >
<cellValueFactory>
<PropertyValueFactory property="" />
</cellValueFactory>
</TableColumn>
</columns>
<!--</!-->
</TableView>
</children></VBox>
</AnchorPane>
解决方案
如果你想在模型中更新你的,你不List
应该使用.ObservableList
ObservableArrayList
从@Tunaki 看到这个答案
推荐阅读
- microservices - 我们还需要一个连接池来支持 HTTP2 的微服务吗?
- python - 如何在python中声明一个每个元素包含两个值的二维数组?另外,请指导我是否有更好的数据结构来做到这一点
- python - python:在对象列表中搜索某些属性值
- python - 使用 smtplib 发送电子邮件的变量
- katalon-studio - 有没有办法在 Katalon Studio 中只设置来自 REST API 测试对象的一些查询参数
- python - 将 map 函数与外部字典(全局)一起使用
- javascript - 如果它不以后缀结尾,我如何知道 fileURL 类型?
- javascript - 根据控制器中的值更新按钮组检查状态
- c++ - 在模板 SFINAE 约束中使用间接级别会导致硬错误
- python - RegEx 用于在 6 位数字序列中交替数字一次