嵌套 ViewModel 的嵌套视图

Nested Views for nested ViewModels

我正在寻找支持嵌套 ViewModel 和视图的 solution/mvvm 框架。我的意思是:

  1. 每个 ViewModel 都派生自 BaseViewModel
  2. ViewModel 具有 BaseViewModel 类型的属性,这些属性是子 ViewModel(嵌套在父 ViewModel 中)
  3. 每个ViewModel都有对应的View
  4. Views有对应ViewModel的子ViewModels对应的ContentControl(可以显示模板化视图的控件)
  5. 现在,在创建 ViewModel 实例时,需要传递具体子 ViewModel 的适当实例。视图应该根据 ViewModels 结构自动解析和嵌套(以某种方式)。

我没有定义不知何故因为可能有很多方法可以做到。

我希望我的想法很清楚。这种方法允许轻松动态地创建 ViewModel 和 View。只需创建 ViewModel 树,例如在 XML 中,并在此基础上创建新功能。

问题是:

  1. 是否有支持这种方法的 mvvm 框架(mvvmcross、catel)Xamarin.Forms?
  2. 您将如何存储 ViewModel 树 - 在 XML、数据库表中,...?
  3. 您将如何创建 ViewModel 的实例 - 反序列化、依赖项注入……?
  4. 如何创建视图并解析(如果框架不支持)?

是的!有一个 MVVM 框架完全符合您的需求,并且在创建时考虑了 Xamarin.Forms:

FreshMvvM: https://github.com/rid00z/FreshMvvm

快速入门指南:http://www.michaelridland.com/xamarin/freshmvvm-quick-start-guide/

它与其他选项相比如何?

It's super light and super simple
It's specifically designed for Xamarin.Forms
Designed to be easy to learn and develop (great when you are not ready for RxUI)
Uses a Convention over Configuration

特征

PageModel to PageModel Navigation
Automatic wiring of BindingContext
Automatic wiring of Page events (eg. appearing)
Basic methods (with values) on PageModel (init, reverseinit)
Built in IOC Container
PageModel Constructor Injection
Basic methods available in Model, like Alert
Built in Navigation types for SimpleNavigation, Tabbed and MasterDetail

您可以根据需要嵌套或派生 ViewModel(在我们的示例中,我们有一个 BaseViewModel)。我们一直在为我们的初创公司使用 FreshMvvM,并且已经过实战测试,可以工作并适合我们需要的任何东西。

一段时间后,我可以分享一些关于我提出的问题的经验:

  1. 不知道有没有mvvm框架支持这种方式。可能 Catel v5 会支持这个,但我没有检查这个。我使用自定义解决方案。
  2. 在我的解决方案中,我将 ViewModels 定义存储在 parent/child 结构中的单个数据库 table 中。
  3. ViewModel 实例由自定义工厂使用数据库 table 中的定义创建。
  4. 视图是使用 ValueConverters 创建的。这是可能的,因为每个视图都有基于 ViewModels 结构创建的绑定。

除了以上答案,我还建议使用 Prism。虽然它对我来说有一些缺点,但它是这种方法中最好的框架。