2011-09-14 58 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

感谢您的关注。 你对我的第一个问题有另一种解决方案吗? –

相关问题