在Windows或者ASP.NET Web應用程式中,我們經常可以看到在Grid控件上通過Load-on-demand的方式來提高系統性能,提升使用者體驗。
所謂Load-on-demand就是在最初表格資料加載時隻加載目前表格中使用者可以看到的行數,當使用者向下滾動或拖拽縱向滾動條時,再将需要顯示的資料通過某種方式動态加載進來。
那麼對于Silverlight,我們可以使用DataGrid通過WCF RIA Service來實作這個功能。
1. WCF RIA Service
我們将會使用WCF Service來提供資料,并且将這個WCF Service host到ASP.Net應用程式中。
- 定義資料對象
使用DataContract和DataMember來辨別資料對象以及對象屬性,這樣就可以通過WCF Service來傳遞這個資料結構了,注意需要添加System.Runtime.Serialization.dll。
- 添加Silverlight enabled WCF Service
在WebApplciation工程中添加一個新的Item,選取”Silverlight enabled WCF Service”,命名為”EmployeeService.svn”.
在PepoleService.svn.cs中添加如下代碼:
注意在上面一步添加完WCF Service後,會在Web.config檔案中添加關于Service的配置資訊:
2. Load-on-demand資料加載
- 在Silverlight工程中添加Service引用
如下圖通過給Silverlight工程添加Service reference來操作WCF Service:
- 從WCFService中擷取資料
将WCF Service引入後,IDE會自動生成EmployeeServiceClient類,通過這個代理我們就可以使用Service上的方法了。
通過如下代碼可以從WCF Service獲得Employee資料:
- 在DataGrid上實作資料的Load-on-demand
示例代碼:
運作程式,拖動ScrollBar到底部,你會發現DataGrid會自動加載資料。
該程式中不滿意的地方就是ScrollBar的Thumb button會随着加載資料的增多而變小,如果您有更好的方式我們可以繼續探讨。