我的应用程序旨在加载XML文件并显示错误(如果有)。
我的问题是如何在屏幕上同时显示(XML和错误)而不耦合(我的应用程序当前可以正常工作)。
我的应用程序当前看起来像(请不要笑或对我参加Photoshop\UI类(class)进行评论):
棕色是另一个称为XmlView的 View 。
我要在红色框显示错误。
因此,用户单击"file"->“打开”,选择文件,.XML内容显示在我的XmlView(棕色)中,我的错误消息显示为红色。这行得通,但是,由于我完全将MainWindow和XmlView耦合在一起,我感到设计糟糕。
我的工作方式是,当用户选择有效的XML文件(从"file"->“打开”)时,我创建了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/