Xaml 如何在运行时更改windows phone应用程序语言?

Xaml 如何在运行时更改windows phone应用程序语言?,xaml,data-binding,windows-phone-7,multilingual,Xaml,Data Binding,Windows Phone 7,Multilingual,我按照此示例构建了一个多语言应用程序: 我成功地将资源数据绑定到如下文本: <TextBlock x:Name="ApplicationTitle" Text="{Binding Path=MultiLangResources.Mainpage_Welcome, Source={StaticResource MultiLang}}"/> 但是,绑定的文本永远不会更新 如何使绑定文本像普通绑定一样更新 有人能帮我解决这个问题吗? 我也试过了,但运气不好 public class Mu

我按照此示例构建了一个多语言应用程序:

我成功地将资源数据绑定到如下文本:

<TextBlock x:Name="ApplicationTitle" Text="{Binding Path=MultiLangResources.Mainpage_Welcome, Source={StaticResource MultiLang}}"/>
但是,绑定的文本永远不会更新

如何使绑定文本像普通绑定一样更新

有人能帮我解决这个问题吗? 我也试过了,但运气不好

public class MultiLang : INotifyPropertyChanged
{
    public MultiLang()
    {
    }

    private static MLTest.LangResource multiLangResources = new GigapodV2.LangResource();

    public MLTest.LangResource MultiLangResources
    {
        get { return multiLangResources; }
        set
        {
            if (value != multiLangResources)
            {
                multiLangResources = value;
                NotifyPropertyChanged("MultiLangResources");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string property)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }
}

LangResource
类本身是不可观察的,因此它的任何绑定属性都不会被观察到。而且,手机不会通知所有与CurrentCulture相关的属性,因为您会动态更改它

如果以这种方式更改语言,则需要重新启动应用程序。但我建议你要小心,因为操作系统本身允许语言交换,这意味着你需要有一个很好的理由让你的应用程序本身允许语言交换

解决方案是创建一个包装类,当您更改CurrentCulture时,该类会通知所有属性它们已更新。使用Simon的[DependsOn]属性可能会使这变得非常简单。

这很容易做到:

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("ca-ES");
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ca-ES");
主要问题是,所有已加载页面上的文本(例如,如果您将语言选择放在主页上,则主页)将需要“手动刷新”

但这可以通过编程轻松完成:

this.btnChangeLanguage.Content = AppResources.Txt_Aceptar;
this.btnChangeLanguage.Content = AppResources.Txt_Aceptar;