gpt4 book ai didi

java - Java中的MVVM无需更改模型(及其业务逻辑)

转载 作者:太空宇宙 更新时间:2023-11-04 09:34:10 24 4
gpt4 key购买 nike

在我的业务逻辑模型中,我使用带有 ArrayList 的类来存储 Content 类型的对象。一切都很完美。

但是,我不知道如何将该模型绑定(bind)到 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;
}
}

模型 View

    public class ViewModel {
private ObservableList<Uploader> items;

public ViewModel() {
items = FXCollections.observableArrayList(model.getUploaderDB().getUploaderList());
}
}

View (MainWindow.java 作为 Controller ,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 的回答

ObservableList doesn't update ArrayList

关于java - Java中的MVVM无需更改模型(及其业务逻辑),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56718098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com