索引
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方法也是基類提供的
此函數也結合前面的章節來看。
--------------------------------------
至此本系列全部寫完了!
源碼下載
喜歡的請點推薦,支持我的文章。謝謝各位啦