嵌套ViewModel的嵌套视图

时间:2016-11-26 14:03:26

标签: mvvm xamarin xamarin.forms mvvmcross catel

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

  1. 每个ViewModel都派生自BaseViewModel
  2. ViewModels具有BaseViewModel类型的属性,它们是子ViewModel(嵌套在父ViewModel中)
  3. 每个ViewModel都有相应的View
  4. 视图具有与相应ViewModel的子ViewModel对应的ContentControl(可显示模板化视图的控件)
  5. 现在,在创建ViewModel实例时,需要传递具体子ViewModel的相应实例。应基于ViewModels结构自动解析和嵌套视图(以某种方式)。
  6. 我没有定义以某种方式,因为可能有很多方法可以做到。

    我希望我的想法很清楚。此方法允许轻松动态地创建ViewModel和Views。只需创建ViewModel树,例如以XML格式创建,并基于此创建新功能。

    问题是:

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

2 个答案:

答案 0 :(得分:1)

过了一段时间,我可以分享一些关于我问的问题的经验:

  1. 我不知道是否有任何支持这种方法的mvvm框架。可能Catel v5会支持这个,但我没有检查过这个。我使用自定义解决方案。
  2. 在我的解决方案中,我将ViewModels定义存储在父/子结构的单个数据库表中。
  3. ViewModel实例由自定义工厂使用数据库表中的定义创建。
  4. 使用ValueConverters创建视图。这是可能的,因为每个视图都具有基于ViewModels结构创建的绑定。
  5. 除了上述答案,我可以建议使用棱镜。虽然它对我来说有一些缺点,但它是这种方法中最好的框架。

答案 1 :(得分:0)

是的!有一个MVVM框架完全符合您的要求,并且是在考虑Xamarin.Forms的情况下创建的:

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

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

与其他选项相比如何?

select col1, col2, col3, max(col4) as column4, min(col5) as column5
from input_table  
group by col1, col2, col3;

功能

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

您可以根据需要嵌套或派生ViewModel(在我们的例子中,我们有一个BaseViewModel)。我们一直在为我们的创业公司使用FreshMvvM,并且已经过测试,可以满足我们的需求。