Silverlight ValidatesOnException默认消息本地化

时间:2011-09-13 09:47:28

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

在我的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方法中使用带有自定义异常的自定义转换器,以验证用户的输入。问题,转换方法中的异常不会被validatesOnException捕获,它会破坏应用程序。

编辑2:澄清 - >如果我有一个绑定到文本框的十进制属性,并在此文本框中输入“blabla”,我想看到有问题,我希望该消息在运行时区域设置而不是操作系统区域设置。 我不能在我的属性设置器中引发异常,因为我从未到达那里,默认转换器在此之前引发它自己的异常。

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

3 个答案:

答案 0 :(得分:0)

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

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

Change culture of Silverlight application

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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