索引
SilverLight企业应用框架设计【五】客户端调用服务端(使用JSON传递数据,自己实现RESTful Web服务)
SilverLight企业应用框架设计【四】实体层设计+为客户端动态生成服务代理(自己实现RiaService)
SilverLight企业应用框架设计【三】服务端设计
SilverLight企业应用框架设计【二】框架画面
SilverLight企业应用框架设计【一】整体说明
首先我们设计的窗体如下
xaml代码如下:
需要说明的:
1.
所有的业务窗体都继承自BasePage类
这也是为什么xaml代码的开始处是<location:BasePage….
2.
由于左侧的树控件和右侧的Grid控件中间
有个GridSplitter控件
所以可以自由的拖动GridSplitter控件以变化左右两侧控件的大小
树控件我们暂且不提(没有什么特殊的地方)
-------------------------
在加载页面的Loaded事件中执行了如下代码
其中IsLoaded属性是基类BasePage的属性
代码如下
这样做就是为了避免重复执行InitMenuTree和InitTypeCB两个方法的代码
(tab页面切换会触发Loaded事件)
------------------------------------
先来看InitMenuTree的代码
笔者并没有使用数据绑定的形式给控件赋值
而是直接创建了树控件的子控件来赋值的(这与我们的数据结构有关,这样做更简便一些)
MenuM类型并不是一个自引用的类型(没有记录ParentMenu只记录了ParentId)
其中InitParentMenu是初始化下拉框的函数(修改子菜单的父级菜单时用到,这里就不多说了)
-----------------------------------------------
InitTypeCB是构造可以使用的菜单路径(下拉框)的函数
此函数反射出了所有业务窗体的类名,并赋值给了一个ComboBox,以供选择
---------------------------------------------------------------
当选中菜单树中的某一项时执行如下事件
因为MenuFormG内的数据绑定元素基本上都是使用的双向绑定(更改会直接反应在实体上)
所以我们深拷贝了一个实体提供给表单(这样就不会影响现有实体的数据)
技巧:深拷贝其实就是执行了一次序列化和反序列化的过程
代码如下:
------------------------------------------------------
下面我们来看一下增加一个菜单的方法
验证客户端输入的数据是否正确的方法,是基类提供的
如果某一个菜单项含有错误信息,那么将验证不通过。
Reload方法也是基类提供的
此函数也结合前面的章节来看。
--------------------------------------
至此本系列全部写完了!
源码下载
喜欢的请点推荐,支持我的文章。谢谢各位啦