现在的位置: 首页 > 综合 > 正文

Mgen Spa工程 2 教程(第2部分):界面生成选项 – SpaObjectOption

2012年07月08日 ⁄ 综合 ⁄ 共 2631字 ⁄ 字号 评论关闭

返回教程目录

在上一篇教程中我们了解了Spa工程的四大部件,在这一篇教程中,我们就开始逐步进入代码部分。这一节我主要讲界面生成的选项,为下一节创建实例程序做准备。

 

返回目录

1. 选项类型概述

界面生成选项很好理解,正如它的名称所述,它就是为生成的界面提供配置设置参数。

整个界面生成的选项类型对应SpaObjectOption类型,在Mgen.Spa命名空间内。这个类型是这样被定义的:

image

 

这个类型很简单,有三个属性,分别代表三个配置选项。

Title属性最简单,它是对整个过程(或者说界面)的描述文字,比如生成的界面是登陆界面,那么Title属性就可以是“登陆”。注意在不同平台的界面中,它会以不同形式被显示,比如在WPF这种基于Windows窗体的程序中,Title属性会显示在对话框窗体的标题上,而在Windows Phone或WinRT这种基于Page的环境下,Title会显示成页面标题。

 

接下来我们来细看一下剩下两个属性。

 

 

 

返回目录

2. 多语言资源存储

第二个讲的属性是关于多语言的资源存储配置,这个选项对应SpaObjectOption的ResourceProvider属性。

 

我们知道Spa工程是完全支持多语言化的,同一个数据,可以提供不同语言的编辑形式,如下:

image  image

 

那么为了实现这样的功能,任何代表界面文字的地方都需要以Key的形式存在,而每个语言的资源是在资源存储中的。当Spa工程去创建界面时,会从相应资源存储中找到相应的Key,并取出具体语言的具体值然后显示在界面上。

因此,资源存储的功能就是可以根据相应的Key找到相应语言的资源。需要的语言定义在当前线程的CurrentUICulture属性中(这属于.NET的内容)。Spa没有限定资源存储的具体执行,而是用一个接口定义资源存储的形态。

 

SpaObjectOption的ResourceProvider的属性针对类型就是IResourceProvider接口,代表一个资源存储类型,它在Mgen.Spa命名空间内,它是这样定义的:

namespace Mgen.Spa

{

    public interface IResourceProvider

    {

        string GetString(string key);

        string GetEnum(Enum e);

    }

}

 

IResourceProvider接口定义两个方法:GetString和GetEnum。

GetString就是我们上面讲的,参数是Key,返回值是当前语言的相应文本。GetEnum我们在讲选择器控件后会讲,现在读者可以忽略掉它。

 

当然开发者不需要每次使用资源都需要自己继承IResourceProvider接口去实现。Spa工程提供了一个默认执行,DefaultResProvider类型,同样在Mgen.Spa命名空间内,这个类型的执行很简单:

public class DefaultResProvider: IResourceProvider

{

    ResourceManager resmgr;

 

    public DefaultResProvider(Type resType)

    {

        if (resType == null)

        {

            throw new ArgumentNullException("resType");

        }

        resmgr = new ResourceManager(resType);

    }

 

    public string GetString(string key)

    {

        return resmgr.GetString(key);

    }

 

    public string GetEnum(Enum e)

    {

        return resmgr.GetString(e.GetType().Name + "_" + e.ToString());

    }

}

 

可以看到是通过一个Visual Studio生成的RESX资源类型来初始化DefaultResProvider类型,GetString方法的执行其实就用返回RESX资源内Key的值。而GetEnum的执行就是把枚举的类型名称和枚举值用“_”连接作为一个Key,然后从内部资源中获取语言文字。

 

 

 

 

返回目录

3. 验证选项

最后一个介绍的选项就是验证选项,对应SpaObjectOption的ValidationOption属性,它对应的类型是ValidationOption类型,也在Mgen.Spa命名空间内。它包含3个子属性,我们分别进行细讲:

image

 

1. 验证触发选项:ValidationTrigger属性

验证触发选项定义控件什么时候进行验证。验证触发选项对应ValidationTrigger枚举(这个类似WPF中的ValidationTrigger),有如下选项:

PropertyChanged:每当用户改变了控件,验证执行。

LostFocus:当控件失去焦点后,验证执行。

Explicit:验证不会自动执行,需要开发者手动调用。(教程后面会讲到)

 

2. 加载后验证选项:OnloadValidation属性

加载后验证选项定义当Spa生成界面后是否立即进行验证。对应OnloadValidation枚举,选项有:

None:不进行验证

Required:进行验证

 

比如我们需要一个不为空的字符串,但是文本框默认就是空的。如果设置加载后不进行验证,那么界面显示后不会提示任何错误(因为没有发生验证):

image

 

而如果加载后验证被设置,那么界面显示后会立即验证:

image

 

3. 对象选项:ObjectOption属性

对象选项定义目标对象后的数据存储是否去更新,对应ObjectOption枚举,选项有:

New:界面上所有控件的值为空。

Edit:界面上的控件会读取背后核心的值。

 

这个也很好理解,其实就是告诉Spa你是想创建一个全新的界面,还是读取背后对象的数据来编辑它。注意ObjectOption和OnloadValidation的配合使用。

 

OK,界面选项这一部分还是很简单的,在下一节中我们会用到这一节学到的知识,然后定义类型,生成类型数据,绑定对象,最后生成界面创建各个平台的Spa工程Hello World程序。在教程第7部分,我们会根据示例,再讲一下这部分的内容。

抱歉!评论已关闭.