Silverlight ValidatesOnException默认消息本地化

7
在我的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",我希望看到存在问题,并且我希望消息在运行时区域设置而不是操作系统区域设置中显示。 我不能在我的属性setter中引发异常,因为我从来没有到达那里,默认转换器在此之前引发了自己的异常。
我希望这很清楚。如果我能帮你帮助我,请不要犹豫:)
3个回答

0
你可以使用自定义的验证规则ValidationRule实现并将其添加到绑定Binding.ValidationRules集合中。您需要在之前清空集合(我不确定如何在XAML中操作),然后添加此规则(如何添加已在MSDN页面中描述)。
这个类有一个Validate方法,您可以在其中执行验证并返回您想要的错误消息。

只存在于WPF中,Silverlight中没有:/ - Maxime ARNSTAMM
啊,抱歉,我非常确定我会获得+100声望值的;)你使用的是哪个版本的SL?在SL4中,您可以实现IDataErrorInfo接口。 - Karel Frajták

0

我不想在构造函数中设置语言,我希望能够在运行时更改它。这不适用,因为this.language是私有设置的。 - Maxime ARNSTAMM
仅仅因为代码在构造函数内部并不意味着运行时就不能修改。使用带参数的构造函数,并包含类似于你所使用的SetLanguage方法的逻辑即可。 - Mamta D

0

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

您的setter可以抛出异常来指示验证错误。或者,您可以使用IDataErrorInfoINotifyDataErrorInfo接口之一来显示验证错误。此页面有一个使用IDataErrorInfo的示例,而这个页面有一个使用INotifyDataErrorInfo的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接