【问题标题】:Silverlight ValidatesOnException default message localizationSilverlight ValidatesOnException 默认消息本地化
【发布时间】:2011-11-16 00:31:40
【问题描述】:

在我的 silverlight 4 MVVM 应用程序中,我可以在运行时切换语言:

public void SetLanguage(string language)
{
    var culture = new CultureInfo(language);
    Thread.CurrentThread.CurrentUICulture = culture;
    Thread.CurrentThread.CurrentCulture = culture;
    // ...
}

对于输入,我只是添加了“ValidatesOnException=true”,以防出现转换问题,它就完成了工作。但是默认的异常消息是在我的操作系统的文化中,而不是在手动选择的文化中。

exception message localization 上的这个线程中,我的想法是更改 CurrentCulture 和 CurrentUICulture,我这样做了。所以我有点卡住了。

我能做什么?

谢谢:)

编辑:我尝试在 convertback 方法中使用带有自定义异常的自定义转换器,以验证用户的输入。问题,convertback 方法中的异常不会被 validatesOnException 捕获,它会破坏应用程序。

编辑 2:澄清 -> 如果我有一个绑定到文本框的小数属性,并且我在这个文本框中输入“blabla”,我想看看有问题,我希望消息出现在运行时语言环境而不是操作系统语言环境。 我无法在我的属性设置器中引发异常,因为我从未到达那里,默认转换器在此之前引发了自己的异常。

我希望它很清楚。如果我可以帮助你帮助我,请不要犹豫:)

【问题讨论】:

    标签: silverlight c#-4.0 silverlight-4.0 localization


    【解决方案1】:

    也许你一开始并没有改变文化。

    我建议您尝试此链接中第一个答案中给出的方法:

    Change culture of Silverlight application

    【讨论】:

    • 我不想在构造函数中设置语言,我希望能够在运行时更改它。这不适用,this.language 是私有集。
    • 仅仅因为它在构造函数中并不意味着它在运行时不会。使用参数化构造函数并包含类似于您使用的 SetLanguage 方法的逻辑
    【解决方案2】:

    一种可能的方法是将属性的类型更改为string,即使您在其后面存储了decimal 值。 getter 将在存储的 decimal 值上调用 ToString,而 setter 将使用 Decimal.Parse 或类似方法将 string 转换回 decimal。这种方法确实意味着您必须自己进行类型转换,但它至少给了您更多的控制权。

    您的 setter 可以抛出异常来指示验证错误。或者,您可以使用接口IDataErrorInfoINotifyDataErrorInfo 之一来显示验证错误。 This page 有一个使用 IDataErrorInfo 的示例,this one 有一个使用 INotifyDataErrorInfo 的示例。

    【讨论】:

      【解决方案3】:

      您可以使用ValidationRule 的自定义实现并添加到Binding.ValidationRules 集合中。您必须先清除集合(我不确定如何执行 XAML)并添加此规则(如何执行此操作在 MSDN 页面之一中进行了描述)。

      该类有Validate 方法,您可以在其中执行验证并返回所需的错误消息。

      【讨论】:

      • silverlight 中不存在,只存在于 wpf 中:/
      • 啊,抱歉,我很确定我会获得 +100 声望;)您使用的是哪个版本的 SL?在 SL4 中,您可以实现 IDataErrorInfo 接口。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多