【发布时间】:2009-12-08 10:03:20
【问题描述】:
我有一个多语言 silverlight 应用程序,其中资源存储在不同语言的 resx 文件中,并绑定到 xaml 内的按钮和标签的内容属性。
在 silverlight 页面的构造函数中设置线程的 UI 文化时,一切正常,但根据用户的选择(通过组合框选择)更改它时 界面没有变化。我需要页面根据新线程的 UI 文化重绘控件并重新绑定到资源文件。
【问题讨论】:
我有一个多语言 silverlight 应用程序,其中资源存储在不同语言的 resx 文件中,并绑定到 xaml 内的按钮和标签的内容属性。
在 silverlight 页面的构造函数中设置线程的 UI 文化时,一切正常,但根据用户的选择(通过组合框选择)更改它时 界面没有变化。我需要页面根据新线程的 UI 文化重绘控件并重新绑定到资源文件。
【问题讨论】:
我不确定您使用什么机制将视图绑定到本地化存储库,但我猜问题出在通知上。
视图只会在收到通知事件时更新绑定中的数据。最有可能的是,您绑定到的具有本地化数据的对象在文化更改时不会发送通知。
您可以考虑将 INotifyPropertyChanged 添加到保存本地化字符串的对象中。然后,向该类添加一个名为“NotifyThatEverythingChanged”的方法。在该方法中,只需发送属性 string.Empty 已更改,这会告诉 UI 更新数据上下文中的所有内容。
就我而言,我有一个名为 MyUIStrings 的 RESX 为我自动生成的对象。它有一堆静态字符串。我从该类派生,并添加功能以通知一切都已更改。 UI 将采取相应措施:
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;
}
【讨论】: