Silverlight 动态更改UI语言

Silverlight 动态更改UI语言,silverlight,localization,Silverlight,Localization,我有一个多语言的silverlight应用程序,其中资源存储在不同语言的resx文件中,并绑定到xaml中的按钮和标签的内容属性 在silverlight页面的构造函数中设置线程的UI区域性时,每件事都可以正常工作,但根据用户的选择(通过组合框选择)进行更改时 界面没有改变。我需要该页面根据新线程的UI区域性重新绘制控件并重新绑定到资源文件。我不确定您使用什么机制将视图绑定到本地化存储库,但我猜问题在于通知 视图仅在收到通知事件时更新绑定中的数据。最有可能的情况是,当区域性更改时,具有您绑定到的

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

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

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

视图仅在收到通知事件时更新绑定中的数据。最有可能的情况是,当区域性更改时,具有您绑定到的本地化数据的对象没有发送通知

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

在我的例子中,RESX为我自动生成的对象称为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;
}

你能详细说明一下你是如何在应用程序中使用这个类的吗。我也尝试过这样做,但绑定不起作用,绑定中的内容是空的。如果我注册“myuistring”而不是notify版本,它就可以正常工作。这是针对Silverlight 4的。实现NotifyThatEverythingChanged的一个更简单的方法是只对PropertyChanged(null)执行操作。请看这里的备注部分:@ArildF:是的。没错。当时我不知道。String.Empty也可以:)@SondreB:我以前也这么做过,在这篇博文中概述了这一点:谢谢,不过这仍然需要你额外键入一点;-)我想直接使用生成的资源类,避免使用“String.SearchButton”。我提出了一个我认为很有效的解决方案: