模型 模型箱组件(ModelBox) - jingjiajie/FrontWork GitHub Wiki

模型箱(ModelBox)组件

  模型箱组件(ModelBox)是FrontWork提供的一款可以用来动态切换模型(Model)的组件。众所周知作为MVVM框架,所有的视图都是通过模型来获取所需要的数据的。事实上,在FrontWork中,同步器和其他组件往往也要连接模型来发挥他们的功能。然而,现今的所有MVVM框架中,一个视图和一个模型的绑定往往是固定的,当我们希望将视图所绑定的模型切换成另一个的时候,我们要手动编写极为复杂的代码,因为现今的MVVM框架没有对此提供支持。
  毫无疑问这是一件令人感到失望的事,即使是微软(MVVM架构的创造者)也没能为开发者提供这样的功能。这使得人们在开发如客户端分页,数据分组等需要固定视图和动态切换Model的功能时显得力不从心。事实上,如果需要实现客户端分页,开发者往往需要自己建立数据结构,来存储所有的数据。然后根据用户选择的页码,把相应的数据从自己的数据结构中取出,再存放到Model中。这将是一件极为复杂的事情,如果考虑到用户会从视图更新Model中的数据,需要将Model中的数据变化同步到自己建立的数据结构中,这样的工作量足以让开发者感到绝望。
  那么,我们不如让事情变得简单些。当我们要切换页码,或者切换分组时,我们直接切换Model就好了。这就是我们为什么设计以及向你介绍模型箱(ModelBox)组件。

ModelBox组件预览图

  模型箱组件(ModelBox),顾名思义,就是一款可以存放多个模型(Model)的组件。在模型箱中存放的每一个模型(Model)都有一个名字(Name)属性以便区分。与模型一样,模型箱也实现了IModel接口,所以在任何需要模型的地方,它都可以当作模型来使用。那么,你可能会疑惑,如果说一个模型箱里存放了若干个模型,那么当我需要把模型箱当作模型来使用的时候,我实际使用的是哪个模型呢?这当然是可以设置的。让我们看一下模型箱的属性。

ModelBox的属性

ModelBox属性预览图

CurrentModeName:String
当前所使用的Model名称。
说明:ModelBox新建时会自动包含一个名为"default"的Model,并且CurrentModeName的值默认为"default"

Configuration: Configuration
配置中心对象
说明:当为ModelBox设置配置中心对象时,ModelBox自动为其包含的每一个Model设置此配置中心对象。当更改配置中心对象时,ModelBox会自动为包含的每一个Model更改配置中心对象。

Mode: string
当前配置模式
说明:当切换Mode时,ModelBox会为其包含的每一个Model切换Mode

ModelBox的方法

  ModelBox实现了IModel,拥有IModel所规定的所有方法。在此不做重复介绍。下面介绍ModelBox所特有的方法

GroupBy方法

public void GroupBy(fieldName);

 当我们需要将一个Model中的各行数据按照某一个字段的值进行分组时,我们可以使用GroupBy方法。该方法接收fieldName参数所对应的列名作为分组列,将当前Model(CurrentModeName所对应的Model)中的各行数据的分组列(fieldName所对应的列)的值以文本方式进行分组。分组完成后会为各分组分别创建一个Model,名称(Name)为该分组的分组列的值。
 要注意的是,执行了GroupBy函数后,ModelBox中原有的所有Model都将被清空,只剩下分组后的分组结果。CurrentModeName会被自动设置为第一个分组的名称。另外,对于null值和""值的分组,都将统一被分入""组。

⚠️ **GitHub.com Fallback** ⚠️