Локализация по словарю - PullRequest
       15

Локализация по словарю

1 голос
/ 14 сентября 2011

У меня есть проект silverlight, который обрабатывает многоязычные файлы ресурсов.Теперь я должен удалить файл ресурсов и прочитать сообщения из базы данных.Когда я использую файл ресурсов, я привязываю элементы управления следующим образом:

<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}}"/>

Это работает правильно, но я должен изменить все привязки в приложении и использовать ([]) скобку вместо (.) Точки.Есть ли способ предотвратить эти изменения?

1 Ответ

2 голосов
/ 14 сентября 2011

Да, вы можете использовать наследование от 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;
    }
}
...