2011-09-14 196 views
1

我有一個Silverlight項目,可以通過Resources文件處理多語言。現在我應該刪除資源文件並從數據庫中讀取消息。 當我使用的資源文件我綁定控件是這樣的:按字典本地化<字符串,字符串>

<TextBlock Text="{Binding Strings.User, Source={StaticResource Localizer}}"/> 

現在我用的字典是這樣的:

public class Localizer : INotifyPropertyChanged 
{ 
... 
    public Dictionary<string, string> Strings 
    { 
     get { return _strings; } 
     set 
     { 
      _strings = value; 
      RaisePropertyChanged("Strings"); 
     } 
    } 
... 
} 

和控件綁定到這個字典是這樣的:

<TextBlock Text="{Binding Strings[User], Source={StaticResource Localizer}}"/> 

它工作正常,但我應該更改應用程序中的所有綁定,並使用([])括號代替(。)點。 有什麼辦法可以防止這種變化?

回答

2

是的,你可以使用來自DynamicObject類派生像下面的代碼片段,如果你有Silverlight 4的

class Localizer 
{ 
    public Strings Strings { get; set; } 
} 

public class Strings : DynamicObject 
{ 
    Dictionary<string, string> values; 

    public Strings(Dictionary<string, string> values) 
    { 
     this.values = values; 
    } 

    public override bool TryGetMember(GetMemberBinder binder, out object result) 
    { 
     string value; 
     bool success = values.TryGetValue(binder.Name, out value); 
     result = value; 
     return success; 
    } 
} 
+0

坦親愛的哈桑汗,但你相信,我們可以綁定UIEelement動態對象。 我喜歡你的示例,但在VS輸出我得到System.Windows.Data錯誤:BindingExpression路徑錯誤:'用戶'屬性上找不到.... ....字符串'....字符串'(HashCode = 10857028)。 BindingExpression:Path ='Strings.User'DataItem ='... Localizer'(HashCode = 30604389);目標元素是... 但是當我從代碼中的字符串中獲取屬性時,不在xaml中正常工作。你知道我該怎麼做? –

+1

剛剛纔知道這是Silverlight中的錯誤http://connect.microsoft.com/VisualStudio/feedback/details/522119/databinding-to-dynamic-objects-is-broken# –

+0

感謝您的關注。 你對我的第一個問題有另一種解決方案嗎? –

相關問題