如何在不同项目中的视图/视图模型之间导航

Posted

技术标签:

【中文标题】如何在不同项目中的视图/视图模型之间导航【英文标题】:How to navigate between Views/ViewModels in different projects 【发布时间】:2014-04-17 08:26:26 【问题描述】:

我有 3 个用于模型、视图和 ViewModel 的不同项目,还有一个用于 UserControls 的项目。在项目 UserControls 中,我包含了对 ViewModels 的引用,以便我可以将 ViewModels 作为我创建的某些 UserControls 的 DataContext。然后在 Views 项目中,我添加了对 UserControls 项目的引用。 我在我的一个用户控件中有一个按钮,以便显示一个视图,但是这是不可能的,因为我没有对 Views 项目的任何访问权限,并且我无法实例化它们中的任何一个,因为添加了从 Views 到 UserControls 的引用导致循环依赖问题。

现在我需要知道是否有任何解决方案可以解决我的这个问题。如果我没有很清楚地解释我的情况,请告诉我。

提前致谢。

【问题讨论】:

您可能会发现这很有帮助:***.com/questions/21107957/… 【参考方案1】:

你有一个设计问题需要解决。

我通常在 MVVM 项目中做的是有一个 Main 项目,它包含在创建的所有视图中。然后,如果需要,您可以拥有 ViewModel 和 Model 项目。 但是创建一个了解您的特定视图的 UserControl 是错误的。您可以做的是将您的 UserControl 放在您的一个视图中,并绑定到“OnClicked”事件,让该事件解析您想要的正确视图。

通常我的 ViewModel 引用我的 Model,而我的 Views 引用我的 ViewModel。这样你就不会遇到循环依赖

【讨论】:

我认为你是对的。我有一个设计问题。实际上我的 Views 项目是我的主要项目。但是视图代码不应该是干净的吗?我的意思是我在教程中看到我们不应该为视图编写任何 c# 代码,并且一切都通过绑定到属性和命令在 xaml 部分中完成。 没错。当您依赖 ViewModel 执行实际工作时,您可以保持视图干净。你用命令绑定到它,让所有的逻辑留在那里,只用 XAML 代码保持你的视图干净

以上是关于如何在不同项目中的视图/视图模型之间导航的主要内容,如果未能解决你的问题,请参考以下文章

在视图中的模型之间导航的 MVC 3 错误

如何通过主视图模型将 UserControl 内容更改为另一个 UserControl。如何在内容之间导航

Prism:如何在区域中注入视图模型实例?

使用 koin 2.2.3 和 jetpack 导航在 2 个片段之间限定视图模型

MVC中视图和模型之间的通信

两个视图模型之间的淘汰赛传递值