2011-09-13 81 views
7

以我的Silverlight 4 MVVM应用,还能在运行时间期间切换语言:的Silverlight ValidatesOnException默认消息本地化

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

对于输入,我只是在转换问题的情况下增加了“ValidatesOnException =真”并且它的工作。但默认的异常消息是在我的操作系统的文化中,而不是手动选择的。

在这个线程exception message localization这个想法是改变CurrentCulture和CurrentUICulture,我做了。所以我有点卡住了。

我该怎么办?

谢谢:)

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

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

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

回答

0

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

我建议大家尽量在这个环节中第一个答案给出的方法:

Change culture of Silverlight application

+0

我不想在构造函数中设置语言,我希望能够在运行时更改它。这不适用,this.language是私人设置。 –

+0

仅仅因为它在构造函数中并不意味着它在运行时不能运行。使用一个参数化的构造函数,并包含类似于您使用的SetLanguage方法的逻辑 –

0

一种可能的方法是将属性的类型更改为string,即使你存储它背后的价值是decimal。该吸气剂将在所存储的值上调用ToString,并且设置者将使用Decimal.Parse或类似的方法从string转换回decimal。这种方法确实意味着你必须自己进行类型转换,但它至少可以给你更多的控制权。

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

0

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

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

+0

在silverlight中不存在,只有在wpf:/ –

+0

啊,对不起,我很确定我获得了+100的声望;)哪个版本的SL是你在用吗?在SL4中,您可以实现IDataErrorInfo接口。 –