在我的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”,我想看到有问题,我希望该消息在运行时区域设置而不是操作系统区域设置。 我不能在我的属性设置器中引发异常,因为我从未到达那里,默认转换器在此之前引发它自己的异常。
我希望它很清楚。如果我能帮助你帮助我,请不要犹豫:)。
答案 0 :(得分:0)
答案 1 :(得分:0)
一种可能的方法是将属性的类型更改为string
,即使您在其后面存储了decimal
值。 getter会在存储的ToString
值上调用decimal
,并且setter会使用Decimal.Parse或类似内容从string
转换回decimal
。这种方法确实意味着您必须自己进行类型转换,但它至少可以让您获得更多控制权。
您的setter可以抛出异常来指示验证错误。或者,您可以使用其中一个接口IDataErrorInfo和INotifyDataErrorInfo来显示验证错误。 This page有一个使用IDataErrorInfo的例子,this one有一个使用INotifyDataErrorInfo的例子。
答案 2 :(得分:0)
您可以使用ValidationRule的自定义实施并添加到Binding.ValidationRules集合中。您必须先清除该集合(我不确定如何进行XAML)并添加此规则(如何在MSDN页面中对其进行描述)。
此类具有Validate
方法,您可以在其中执行验证并返回所需的错误消息。