微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Silverlight中即时切换UI文化数据绑定

我有一个TextBlock控件,它是绑定到DateTime属性的数据.

文本显示如下:

2010年10月21日,星期四

我需要动态切换UI Culture,使用以下内容

Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture 
                                    = new CultureInfo("de-de");

我试过这个强制绑定到recalc:

var bindingExpression = textBlock.GetBindingExpression(TextBlock.TextProperty);
bindingExpression.UpdateSource();

但我仍然看到周四而不是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;
}

现在将此实例添加到应用程序资源:

<nt:Localizer x:Key="Localizer"/>

现在将它绑定到您的根视觉(f.e.Frame,UserControl或Page),如下所示:

<UserControl ... Language="{Binding Language,Source={StaticResource Localizer}}">

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐