【问题标题】:Nested Views for nested ViewModels嵌套视图模型的嵌套视图
【发布时间】:2017-04-10 16:34:18
【问题描述】:

我正在寻找一个支持嵌套 ViewModel 和 View 的解决方案/mvvm 框架。我的意思是:

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

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

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

问题是:

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

【问题讨论】:

    标签: mvvm xamarin xamarin.forms mvvmcross catel


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      是的!有一个 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,并且已经过实战测试,可以满足我们的任何需求。

      【讨论】:

      • 感谢您的回复! FreshMvvm 是否首先支持 ViewModel(通过 ViewModel 导航)?
      • 是的,FreshMvvM 支持 ViewModel First 导航。实际上,导航应该通过 ViewModels。
      • 有趣的替代方案,不知道除了支持嵌套用户控件(带有注入模型)的 Catel 之外的任何其他 mvvm 框架/工具包。 Catel 不是一个好的选择,因为它不支持 Xamarin Forms(还),所以你现在真的需要别的东西。我在哪里可以找到有关该功能的示例?尤其是父子关系对我来说应该很有趣。
      • 谢谢Raven,我明天试试。你能更具体地介绍一下 RxUI 吗?你是说 ReactiveUI 吗?是否支持嵌套用户控件和 ViewModel 优先导航?
      • 我刚刚检查了文档和示例,但没有关于嵌套 ViewModel 的内容。你能举个例子吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      相关资源
      最近更新 更多