gpt4 book ai didi

mvvm - 如何保持不同的 View 与 MVVM 解耦

转载 作者:行者123 更新时间:2023-12-03 10:38:20 26 4
gpt4 key购买 nike

我的应用程序旨在加载 XML 文件并显示错误(如果有)。

我遇到的问题是如何在不耦合的情况下在屏幕上同时显示(XML 和错误)(我的应用程序当前可以工作)。

我的应用程序目前看起来像(请不要 mock 或评论我正在上 Photoshop\UI 类(class)):

enter image description here

棕色是称为 XmlView 的不同 View 。
红色框是我希望显示错误的地方。

因此,用户单击 File->Open,选择文件,.XML 内容显示在我的 XmlView(棕色)中,我的错误消息显示为红色。这行得通,但是我有一种可怕的感觉,我的设计很糟糕,因为我已经完全耦合了我的 MainWindow 和 XmlView。

我的工作方式是,当用户选择一个有效的 XML 文件(从 File->Open)时,我创建我的 XmlView 的一个实例并将它绑定(bind)到我的 MainWindow 类的 Views 属性。我的 XmlView 采用 1 个参数,即 MainWindow 类型。

因此,在我的 XmlView 中,要更新我的 ErrorList,我会编写类似于

_mainWindow.ErrorList.Add(//newError)

但这现在意味着我的 XmlView 知道我认为不想要的 MainWindow。

所以,最后,我的问题!我的设计很差还是可以?

最佳答案

你应该考虑using an MVVM framework if you are doing MVVM .

这取决于加载 XML 的责任是谁,但我建议 XmlViewModel ,而不是 MainViewModel .

在这种情况下,MainViewModel应该只是其他 View 模型的导体。在您的第一种情况下,它将实例化 XmlViewModel ,传递文件路径并将其设置为当前 View 。
XmlViewModel将负责加载和验证 XML。它也可以有一个显示验证错误的 subview 模型。它应该异步加载 XML,并带有某种形式的忙碌通知。
MainViewModel可能要执行许多 View 模型,因此如果您要使用诸如 Caliburn.Micro 之类的框架,这将是 conductor type .

关于mvvm - 如何保持不同的 View 与 MVVM 解耦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15899517/

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