动态更改UI语言

时间:2009-12-08 10:03:21

标签: silverlight localization

我有一个多语言的silverlight应用程序,其中资源存储在不同语言的resx文件中,并绑定到xaml中的按钮和标签内容属性。

在silverlight页面的构造函数中设置线程的UI文化时,每件事都可以正常工作,但是根据用户的选择进行更改(通过组合框选择) 界面不会改变。我需要页面重绘控件并根据新线程的UI文化重新绑定到资源文件。

1 个答案:

答案 0 :(得分:3)

我不确定您使用什么机制将视图绑定到本地化存储库,但我猜测问题在于通知。

视图仅在获取通知事件时更新绑定中的数据。最有可能的是,具有您绑定的本地化数据的对象在文化更改时不会发送通知。

您可以考虑将INotifyPropertyChanged添加到包含本地化字符串的对象。然后,向该类添加一个名为“NotifyThatEverythingChanged”的方法。在该方法中,只需发送属性string.Empty已更改,即告知UI更新数据上下文中的所有内容。

在我的情况下,我有一个对象为我自动生成的名为MyUIStrings的对象。它里面有一堆静态字符串。我派生自该类,并添加功能以通知所有内容已更改。用户界面将采取相应行动:

public class NotifyableUIStrings : MyUIStrings, INotifyPropertyChanged
{
    public void NotifyThatEverythingChanged()
    {
        OnPropertyChanged(string.Empty);
    }

    protected void OnPropertyChanged(string propertyName)
    {
        var handlers = PropertyChanged;
        if(handlers != null)
            handlers(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}