【问题标题】: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。在您说他们正在导航到“视图”的那个中,它只是在名称中,因为ViewA 是ContentPage
【解决方案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 中使用此类以将ViewModel 与View 匹配。因此可以从ViewModel 导航到ViewModel。这样ViewModel 和View 对彼此一无所知。这种方法的缺点是复杂。
这是一个非常简短的答案,但是,我希望您能理解重点。这两种方法都有很多例子:
P.S.:Prism 有非常好的导航机制。我上面写的和我提供的例子只是为了对这种方法进行低层次的理解。如果你想使用 Prism,你一定要熟悉它。