2012年3月31日 星期六

[Silverlight]元件秘訣(二):DATEPICKER實戰使用示範

在我新工作的公司客戶群中,發現大部份的商業貿易系統都會提供訂貨、訂座等功能。以致我需要使用DatePicker元件於介面去讓用戶選擇訂貨、訂座日期。而現實的情況中,我亦需要限制用戶去不能選擇太久遠的日期,例如限制用戶只可選擇未來三個月內的日期。因此,我寫了以下範例就是要示範如何用DatePicker 去限制用戶能夠選擇的日期。先看以下介面。

2012年3月30日 星期五

[Silverlight]元件秘訣(一):設置用戶介面成檢視模式的技巧

在開發一般商業應用程式,客戶常常都會要求我們能夠把用戶介面設置成為(Read only Mode or View Mode)唯讀或檢視模式,使某些用戶不應修改或編輯介面上的資料。而我們目標就是把所有介面上的元件都設置成不能打字或選項。

以下是範列的介面,包含了幾個按鈕,功能分別是:View Mode按鈕 -把整個介面設置成唯讀檢視模式。Lock Patient Name Column按鈕 - 只把DataGrid的Patient Name欄位設定成唯讀。Input Mode按鈕 - 把整個用戶介面還原成可編輯狀態。

2012年3月24日 星期六

[Silverlight] AutoCompleteBox技巧演示(一):透過非同步資料存取方式動態設定AutoCompleteBox的資料源

本文章是要展示如何利用WCF資料存取服務,以非同步方式動態設定AutoCompleteBox的資料源。由於使用非同步存取資料會有時間上的延誤,當介面載入後並不一定能及時提供資料源予AutoCompleteBox,故此我們在考慮介面設計時必須先決定是否接受延誤所帶來的影響。或是加入ProgressBar去控制此問題。

而AutoCompleteBox的作用是輔助使用者去加快輸入資料予欄位上,故此不需考慮能否立刻提供資料源予AutoCompleteBox。

基於使用WCF服務的關係,本示範中在後台.Web上新增了Model資料夾,並增加了一個Patient物件以非同步資料存取方式供應病人資料予前台。同時新加了Service1.svc檔案去訂立條約。
專案結構如下圖:

2012年3月23日 星期五

[Silverlight] CombBox技巧演示(方法三):解決ComboBox在DataGrid內,如何設定預設值於對應CellTemplate中的TextBlock

我在[Silverlight] CombBox技巧演示(方法一)的文章中,只教授了如何在ComboBox選擇了項目後,刷新對應的TextBlock,並沒有提供方法去解決ComboBox與對應TextBlock的預設值問題。因此,我把程序碼稍為修改一下,於介面開始載入時,設定預設值於ComboBox。然後運用DataGrid的LoadingRow事件,去刷新DataGrid每行列中ComboBox對應的TextBlock。


2012年3月18日 星期日

[Silverlight] CombBox技巧演示(方法二):解決在DataGrid內的CellEditingTemplate中選了ComboBox值後,刷新對應CellTemplate內TextBlock的值

在上一篇的文章中,我用了DataGrid的CellEditEnd事件來引發刷新CellTemplate內TextBlock的值。其實亦可用另一個方法解決,就是在自定的類別中透過 INotifyPropertyChanged 介面,去刷新TextBlock。

記得我在初學Silverlight的時候了解到要使用System.ComponentModel的命名空間實作 INotifyPropertyChanged 介面於自定的類別,並把它繫結到DataGrid。以下程式碼就是示列,在DataGrid1所繫結的Diagnosis 類別實施 INotifyPropertyChanged 介面,並且Diagnosis物件中的Patient屬性會繫結相關CellEditingTemplate內的ComboBox。因此,可在Patient屬性內加上程式碼去轉換出對應的CellTemplate中TextBlock的值。由於轉換過程中要以ComboBox的資料項目來源作比較,所以我亦在Diagnosis物件中以ObservableCollection<Patient> patientList這集合來儲存ComboBox的數據源。然後轉換出來的值儲存於Diagnosis物件中的patientName屬性,並繫結到對應CellTemplate內的TextBlock。

2012年3月17日 星期六

[Silverlight] CombBox技巧演示(方法一):如何在DataGrid內的CellEditingTemplate中選了ComboBox的值後,刷新CellTemplate內TextBlock的值

最近,我轉到一間在香港比較大型的軟件公司工作。基於新公司客戶的要求在工作中需要我用到微軟Silverlight。所以我嘗試通過互聯網查找一些關於Silverlight的學習資源。但我發現很香港的公司在他們的業務應用程式中使用 Silverlight

此,我去了中央圖書館借了些書,並且到外國的相關技術網站獲取Silverlight一些基本的知識。今天我開始總結一些編寫silverlight時所遇到的程式問題,根據我個人對 Silverlight 研究的經驗,提出一些方法給大家參考。

問題根源 在一些Silverlight的討論區中,曾詢問在DataGrid內以CellTemplate 和CellEditingTemplate方式加入ComboBox時,遇到了以下問題:

(當我在CellEditingTemplate內的下拉式清單的值後,不知道如何才能刷新所對應的CellTempate內 TextBlock值)

這問題我亦遇到,因此我寫了一個ComboBox CellTemplate CellEditingTemplate 之間的示例。下的代碼示例將向您展示如何解決它。我用的開發環境 Visual Studio 2010 Silverlight 4 版本。