IValueConverter和异常验证

Ale*_*sev 8 c# silverlight

我正在使用自定义DateTimeToString:IValueConverter

在我的ConvertBack方法中,我在转换失败时抛出异常,但它没有显示为验证失败(这是一个未处理的应用程序异常),我想将其显示为验证问题(红色边框).

简而言之,我希望它在DateTime + Texbox中显示验证消息("输入字符串格式不正确"),但使用我的自定义IValueConverter.

Mar*_*rth 7

虽然我原则上同意winSharp93的回答/sf/answers/450773431/,但我发现如果从ConvertBack方法返回ValidationResult,您将获得预期的验证行为.

您将需要使用如下所示的TryParseTryParseExact方法,或者如果您使用Parse方法,则捕获FormatException.

DateTime result;
if (DateTime.TryParseExact(dateString, dateFormat, culture, DateTimeStyles.None, out result))
{
    return result;
}
else 
{
    return new ValidationResult("Date string format error");
}
Run Code Online (Sandbox Code Playgroud)

  • 不,它显示标准"FieldName输入格式不正确",因此在这种情况下不会使用ValidationResult中指定的错误消息.您确实获得了验证错误可视指示器,因为这个默认消息对我来说是可以接受的,所以我没有试图弄清楚为什么不使用该消息. (2认同)

Mat*_*ias 1

尽管可以使用 ValueConverters,但我不推荐它。

最好看一下MVVM 模式(另请参阅:思想:MVVM 消除了 99% 对 ValueConverters 的需求)。然后,您可以IDataErrorInfo在 ViewModel 中实现,并且验证变得尽可能简单。

根据我的经验,继续使用 ValueConverts 只会让您更加头疼。

  • @winSharp93:1)代码重用,2)我不想将此代码放入 ViewModel 中,因为它与表示逻辑无关。转换代码始终相同。 (2认同)