首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >prism.forms具有Xamarin.Forms依赖关系

prism.forms具有Xamarin.Forms依赖关系
EN

Stack Overflow用户
提问于 2016-12-12 15:25:17
回答 2查看 266关注 0票数 0

在MVVM模式中,ViewModel不应该对View (及其依赖项)有任何了解。

针对Xamarin.Forms的棱镜(MVVM库)依赖于Xamarin.Forms,因此它打破了上述规则,尽管棱镜团队声称实现了微软的模式和实践。另一个库没有这样的依赖项(例如mvvmcross、freshmvvm)

如何理解它?

编辑:

  1. 根据BraveHeart的回答:将ViewModel项目迁移到Xamarin.Forms的Prism项目(带有Xamarin.Forms依赖项)到WPF的ViewModel项目有多难?
  2. Xamarin.Forms的棱镜将来会消除Xamarin.Forms依赖吗?
EN

回答 2

Stack Overflow用户

发布于 2016-12-12 15:48:59

有趣的一点,但并不是很准确。

正如您所说的,MVVM将ViewModel从视图中分离出来。因此,如果我们在ViewModel中有一个视图实例,然后开始从视图模型直接控制它,就会打破MVVM模式,就会打破这个模式。

在视图模型中拥有视图依赖的库不会破坏mvvm模式。考虑在双方都有一个Json库的情况。然而,这将限制我们的解决方案的跨平台性。因此,在您的情况下,您将无法与Xamarin以外的其他平台共享您的视图模型(例如,WPF)。

如果您真的想使用棱镜,同时对WPF具有相同的ViewModels,那么从理论上讲,这是可行的:

  1. 将ViewModels移动到一个单独的可移植项目,该项目既没有棱镜,也没有Xamarin.Forms引用。
  2. 将Prism.Forms逻辑移到后面的代码中,可以注入诸如NavigationService和PageDialogServices之类的东西。同时,我认为,您必须通过实例化viewmodels将视图绑定到视图模型,并将它们指定为绑定上下文。所以也许你会妥协视图模型定位器。
  3. 如果您想从ViewModel向用户发送一条消息,那么只需在视图模型中引发一个事件,视图侦听该事件,您就可以从视图中显示消息。
  4. 这样,从理论上讲,您可以与WPF共享视图模型。

Notes

  • 因为WPF和Mobile非常不同,所以您可能很难共享Vewmodel,而不是技术上的困难,而是逻辑上的困难。例如,手机是PageBased,每一页都会有自己的ViewModel,在理想和更干净的情况下。另一方面,WPF是一个具有一个大ViewModel的大视图。我认为共享Xamarin的所有视图模型并在您的WPF项目中有效地使用它们的唯一方法是将您的WPF项目划分为区域。
  • 我并不是百分之百地确定AutoViewModelLocator是否会起作用,它可能会根据棱镜团队使用注册的方式工作。我记得有一个棱镜的实现,你可以注册视图,它是ViewModel,但我不记得是哪个版本。但就我个人而言,我认为仅仅在代码背后或Xaml中使用BindingContext = _viewmodel;并不是一件很大的事情。
票数 1
EN

Stack Overflow用户

发布于 2016-12-12 19:21:40

广告1:考虑到视图有点相似,迁移视图模型应该很容易,也许是复制和粘贴+整理的问题。

广告2:如果发生这种情况,我会很惊讶,相反,更有可能发生,见关于github的评论

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41104088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档