Lex*_*kov 3 data-binding silverlight localization silverlight-4.0
我有一个TextBlock控件,它是绑定到DateTime属性的数据.
文本显示如下:
2010年10月21日,星期四
我需要动态切换UI Culture,使用以下内容:
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture
= new CultureInfo("de-de");
Run Code Online (Sandbox Code Playgroud)
我试过这个强制绑定到recalc:
var bindingExpression = textBlock.GetBindingExpression(TextBlock.TextProperty);
bindingExpression.UpdateSource();
Run Code Online (Sandbox Code Playgroud)
但我仍然看到周四而不是Donnerstag ......
我该怎么办?有任何想法吗?
我找到了一个更好的方法,它只需要更新根视觉.
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;
}Run Code Online (Sandbox Code Playgroud)
现在将此实例添加到应用程序资源:
<nt:Localizer x:Key="Localizer"/>
Run Code Online (Sandbox Code Playgroud)
现在将它绑定到您的根视觉(fe Frame,UserControl或Page),如下所示:
<UserControl ... Language="{Binding Language, Source={StaticResource Localizer}}">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4341 次 |
| 最近记录: |