我正在尝试使用MVVMCross建议的程序集架构尽可能多地共享viewmodels:
MyApp.App
└ ViewModels
├ GlobalViewModel1
└ GlobalViewModel2 (abstract)
MyApp.Droid
├ Views
│ ├ View1
│ └ View2
└ ViewModels
└ ChildOfGlobalViewModel2
MyApp.Store
├ Views
│ ├ View1
│ └ View2
└ ViewModels
└ ChildOfGlobalViewModel2
我可以正确导航到View1
及其关联的视图模型GlobalViewModel1
,但是当我想要导航到View2
时它会变得更复杂,因为它的视图模型从一个平台到另一个平台略有不同。
我认为如果我在每个平台上注册Mvx.RegisterType<GlobalViewModel2, ChildOfGlobalViewModel2>()
,那么当GlobalViewModel1
能够使用this.ShowViewModel<GlobalViewModel2>()
进行导航时。显然我错了,因为我在应用程序尝试实例化抽象类时遇到异常。
我通过覆盖InitializeViewLookup
来查看手动查找初始化,所以我尝试将视图关联到父类和子类,但这些配置都没有成功。
我已经通过注入所需的行为解决了这个问题,因为将它封装在一个类中是相关的,但在某些情况下,这种方法只会强制我创建一些类,这些类会使代码的可读性降低,应用程序将来难以维护。
我是否缺少某些配置或是否应该更改方法?如果是这样,推荐的方法是什么?
答案 0 :(得分:2)
MvvmCross中的默认设置是viewmodel导航 - 这不包括继承导航。
如果您真的想要,可以覆盖部分mvx以支持您的抽象场景。但是,我认为这将是值得付出的努力。
相反,我建议:
IG2Service
的单个属性的服务G2Type
。然后,每个平台都可以set
Global2的VM类型,然后导航可以在执行导航之前调用get
。注意:使用此技术,您将无法使用ShowViewModel<T>
覆盖以这种方式导航,但非泛型覆盖应该可以正常工作。