如何在 Silverlight 中即时切换数据绑定的 UI 文化 [英] How to switch UI Culture of data binding on the fly in Silverlight
问题描述
我有一个 TextBlock 控件,它是绑定到 DateTime 属性的数据.
I have a TextBlock control, which is data bound to DateTime property.
文本显示如下:
2010 年 10 月 21 日,星期四
Thursday, October 21, 2010
我需要使用如下方式即时切换 UI 文化:
I need to switch UI Culture on the fly, using something like this:
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture
= new CultureInfo("de-de");
我已经尝试过强制绑定重新计算:
I've tried this to force binding to recalc:
var bindingExpression = textBlock.GetBindingExpression(TextBlock.TextProperty);
bindingExpression.UpdateSource();
但我仍然看到星期四而不是唐纳斯塔...
But I still see Thursday instead of Donnerstag...
我该如何继续?有什么想法吗?
How do I proceed? Any ideas?
推荐答案
我找到了一个更好的方法,它只需要更新根视觉对象.
I've found a better approach, which requires to update only the root visual.
public sealed class Localizer : INotifyPropertyChanged
{
public Localizer()
{
Culture = Thread.CurrentThread.CurrentCulture;
}
XmlLanguage _language;
public XmlLanguage Language
{
get { return _language; }
private set { _language = value; RaiseOnPropertyChanged("Language"); }
}
CultureInfo _culture;
public CultureInfo Culture
{
get { return _culture; }
set
{
Contract.Requires(value != null);
if (_culture == value) return;
_culture = value;
Thread.CurrentThread.CurrentCulture =
Thread.CurrentThread.CurrentUICulture = value;
Language = XmlLanguage.GetLanguage(value.Name);
RaiseOnPropertyChanged("Culture");
}
}
protected void RaiseOnPropertyChanged(string propName)
{
var e = OnPropertyChanged;
if (e != null) e(this, new PropertyChangedEventArgs(propName));
}
public event PropertyChangedEventHandler OnPropertyChanged;
}
现在将此实例添加到应用程序资源中:
Now adding this instance to application resources:
<nt:Localizer x:Key="Localizer"/>
现在将其绑定到您的根视觉对象(例如框架、用户控件或页面),如下所示:
Now bind it to your root visual (f.e. Frame, UserControl or Page) like this:
<UserControl ... Language="{Binding Language, Source={StaticResource Localizer}}">
这篇关于如何在 Silverlight 中即时切换数据绑定的 UI 文化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!