【问题标题】:Is it right to call Navigate to other page from ViewModel?从 ViewModel 调用 Navigate 到其他页面是否正确?
【发布时间】:2011-03-04 10:42:05
【问题描述】:

我知道有很多方法可以从 ViewModel 导航到其他页面。

我不确定这是否是个好主意,因为 MVVM 的目的是将 View 与 ViewModel 分开,但导航到 ViewModel 中的其他页面意味着 View 和 ViewModel 之间存在一对,也就是说,如果我更改 View名称,我也需要更改 ViewModel 中的 URI(字符串)。

我想知道,从 ViewModel 调用 Navigate 到其他页面是否正确?如果错误,导航到其他页面的正确(或更好)方式是什么?

【问题讨论】:

    标签: silverlight mvvm


    【解决方案1】:

    既正确又自然。

    当您发出导航请求时,您作为 Uri 的一部分提供的“名称”就是您的 View 类在容器中注册的名称。由于向容器注册类是由模块本身而不是 View 或 ViewModel 完成的,因此您不会在 View 和 ViewModel 之间引入耦合。

    也就是说,如果您想自定义 Prism 解释导航请求的方式,您始终可以编写一个实现 IRegionNavigationContentLoader 的类。如果您将其注册到容器中,Prism 将解析您自己的类而不是内置的RegionNavigationContentLoader。但这并不是世界上最简单的事情。

    【讨论】:

      【解决方案2】:

      为什么不创建一个单独的类来保留导航逻辑?在这种情况下,您只需要从 ViewModel 发送一条消息,该程序应该更改视图,并且可以任意决定细节。使用这种方法,您仍然没有 View 和 VM 之间的直接连接

      【讨论】:

      • 你仍然有一个连接和耦合。将它隐藏在另一个类中不会让它消失。当然,集中导航逻辑(如果你有更多的话)有它的优点。
      猜你喜欢
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      相关资源
      最近更新 更多