Silverlight的DataGrid 如何支援多國語系
最近在做Silverlight的專案,要支援多國語系,
一般來說最容易想到的就是用資源的方式記錄每一國的文字,
再從資源中抓字串出來顯示(將資源加入至 Silverlight 應用程式)
一般的控制項用Binding的都很容易實現,但是遇到DataGrid的Header就不是這麼簡單了!
我找了好多時間,也試過很多方法,以下就記錄一些比較成功的方式。
1.使用HeaderStyle
設定HeaderStyle,若是使用預設的Style,裡面有ContentPresenter.Content可以Binding,
就像一般控制項一樣,這在欄位不多或是有特殊視覺需求的情況下可以用,
一旦欄位很多且沒有特殊需求,這樣寫就感覺麻煩又浪費。
2.使用Display屬性
DataGrid的內容如果是一個INotifyPropertyChanged的物件的話,
可以在每個Property設定Header要顯示的文字,如下:
1: [Display(ResourceType = typeof(Myresource), Name = "SymbolName")]
2: public string Name {
3: get { return _Name; }
4: set {
5: if (_Name != value) {
6: _Name = value;
7: Update("Name");
8: }
9: }
10: }
其中MyResource就是我的資源檔物件,SymbolName就是要顯示的字串的Key,這樣使用非常方便。
但是上面兩個方法,要改變語系的話,卻必須在頁面出現之前改變,
而我的專案卻要做到即時可以變動,所以就必須從DataGrid產生Column時做手腳了!
這個要稍微解釋一下DataGrid的行為,下一篇再說!