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

Mgen Spa工程 2 教程(第8部分):再议界面生成选项(SpaObjectOption),Spa对象(SpaObject)

2012年09月18日 ⁄ 综合 ⁄ 共 1825字 ⁄ 字号 评论关闭

返回教程目录

在第2部分和第3部分,我曾经讲了界面生成选项和Spa对象,不过那时读者还不是很了解Spa工程,此时读者已经非常了解Spa工程了。在这一部分中,我们再来强化一下上面学到的知识。

 

返回目录

1. 界面生成选项

界面生成选项中的ValidationTrigger枚举理解起来很简单:

PropertyChanged:代表控件改变后立即验证

LostFocus:代表控件失去焦点后验证

Explicit:代表不会自动验证,开发者手动进行验证(教程后期会讲)

 

OnloadValidation和ObjectOption枚举配合起来使用有不同的效果。

OnloadValidation有两个值:

None:界面显示后不进行验证

Required:界面显示后进行验证

 

ObjectOption也有两个值:

New:生成界面控件值为空。

Edit:生成界面控件会读取背后核心的属性值。

 

我们来看这样一个类型:

//+ using Mgen.Spa;

//+ using Mgen.Spa.Controls;

//+ using Mgen.Spa.Validators;

class MySpaType

{

    [SpaHeader("Key1")]

    [TextBoxStringControl]

    [StringRequiredRule]

    public string Text { get; set; }

 

    public MySpaType()

    {

        Text = "Mgen";

    }

}

 

这个类型只有一个属性Text,创建后值是”Mgen”,控件是文本框,验证器是要求不能为空的StringRequiredRule。

 

下面是OnloadValidation和ObjectOption的四种组合结果。

OnloadValidation.Required和ObjectOption.New - 数据为空且有验证错误:

image

OnloadValidation.Required和ObjectOption.Edit - 数据不为空没有验证错误:

image

OnloadValidation.None和ObjectOption.New - 数据为空不进行验证

image

OnloadValidation.None和ObjectOption.Edit - 数据不为空不进行验证

image

 

返回目录

2. Spa对象

这一部分原来是在教程第2节讲界面生成和Hello World中的,不过考虑那时读者刚了解到界面生成,正在读Hello World代码,可能会影响读者理解一些简单概念。于是把它搬到了这里,此时,教程不知不觉已经到了第8部分了,读者已经对Spa工程非常了解了,那么强调一下这个Spa对象(SpaObject类型)的使用:

 

Spa对象(SpaObject类型)代表着生成界面对象的数据,是和一个数据对象是绑定的。比如在这段代码中:

var myObject = new MySpaType();

var opt = new SpaObjectOption(

    new ValidationOption(

        ValidationTrigger.PropertyChanged,

        OnloadValidation.Required,

        ObjectOption.Edit),

    new DefaultResProvider(typeof(Res)),

    Res.Title);

var spaObject = SpaManager.GetObject(myObject, opt);

 

new SpaWindow(spaObject).ShowDialog();

 

最后得到的Spa对象,也就是spaObject变量是紧紧得和数据对象(myObject变量)绑定的。

那么开发者可以只使用这一个Spa对象来多次创建SpaWindow从而多次对myObject进行编辑。(此过程不需要多次创建Spa对象)

但是开发者不可以同时把一个Spa对象显示在多个SpaWindow中。(这样做也是没有意义的)

 

另外,因为Spa对象代表绑定对象界面中的数据,因此如果开发者:

> 想改变对应数据界面的语言。

> 想对另一个对象进行界面生成。

那么必须对相应对象重新进行界面生成(再次调用SpaManager.GetObject方法)。

 

提示:

其实Spa对象就是MVVM编程模式的ViewModel。

 

最后,还是推荐开发者每次显示界面时都去生成一个Spa对象。

抱歉!评论已关闭.