Silverlight的DataGrid 如何支援多國語系

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的行為,下一篇再說!