【问题标题】:Navigating to a Page versus a View导航到页面与视图
【发布时间】:2026-01-27 19:50:01
【问题描述】:

我正在使用 Prism 使用 Xamarin.Forms (mvvm),并注意到 some tutorials 显示导航到另一个页面,而 others 显示导航到视图。

在高层次上,我理解字面上的区别......但是我不明白什么时候应该使用一个而不是另一个?我倾向于认为某些推理是围绕依赖关系进行的,例如:

页面具有User 的实例> 导航到视图= User 在使用back 操作时仍然存在...同时,如果您希望在导航to 和@987654327 时具有相同的行为@一个页面,您需要通过参数传递实例...这是正确的/导航到views而不是pages背后的原因吗?

【问题讨论】:

    标签: mvvm xamarin.forms prism


    【解决方案1】:

    在 X.Forms 中 View's 只是可视对象,它们不支持任何导航或任何类型的基础架构。它们只能在您导航到托管它们的 Page 时显示,短语导航到 View 是没有意义的。所以你应该只使用Page's.. 在你的示例项目中,它们也只导航到Page's。在您说他们正在导航到“视图”的那个中,它只是在名称中,因为ViewAContentPage

    【讨论】:

      【解决方案2】:

      从技术上讲,在纯 MVVM 中,ViewModel 应该对 View 完全一无所知,反之亦然。当您使用Page First Navigation 方法时,您违反了第一句话。这是一个例子:

      class MyViewModel
      {
      }
      
      class MyView
      {
          public MyView()
          {
              InitializeComponent();
              // Alternatively you can do the same thing in XAML
              this.BindingContext = new MyViewModel();
          }
      }
      

      如您所见,View 知道ViewModel
      当您使用ViewModel First Navigation 方法时,决定哪个 View 应该有女巫 ViewModel 被委派给一个专门的班级。然后在自定义NavigationService 中使用此类以将ViewModelView 匹配。因此可以从ViewModel 导航到ViewModel。这样ViewModelView 对彼此一无所知。这种方法的缺点是复杂。

      这是一个非常简短的答案,但是,我希望您能理解重点。这两种方法都有很多例子:

      P.S.:Prism 有非常好的导航机制。我上面写的和我提供的例子只是为了对这种方法进行低层次的理解。如果你想使用 Prism,你一定要熟悉它。

      【讨论】: