代码之家  ›  专栏  ›  技术社区  ›  Dave

如何保持不同视图与MVVM解耦

  •  1
  • Dave  · 技术社区  · 12 年前

    我的应用程序被设计为加载一个XML文件并显示一个错误(如果有的话)。

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

    我的应用程序目前看起来像(请不要嘲笑或评论我参加Photoshop \UI课程):

    enter image description here

    棕色是一个不同的视图,称为XmlView。
    红色框是我希望显示错误的地方。

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

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

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

    _mainWindow.ErrorList.Add(//newError)
    

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

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

    1 回复  |  直到 12 年前
        1
  •  1
  •   devdigital    12 年前

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

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

    在这种情况下 主视图模型 应该只是其他视图模型的导体。在第一种情况下,它会实例化 XmlViewModel(XmlViewModel) ,传递文件路径并将其设置为当前视图。

    这个 XmlViewModel(XmlViewModel) 将负责加载和验证XML。它也可能有一个显示验证错误的子视图模型。它应该异步加载XML,并提供某种形式的繁忙通知。

    这个 主视图模型 可能想要进行许多视图模型,因此如果您要使用诸如 Caliburn.Micro ,这将是一个 conductor type .

    推荐文章