【发布时间】:2011-05-25 11:39:32
【问题描述】:
我有一个文本框,它绑定到一个类型为 Timespan 的属性的类,并编写了一个值转换器将字符串转换为 TimeSpan。
如果在文本框中输入了非数字,我希望显示自定义错误消息(而不是默认的“输入字符串格式错误”)。
转换器代码为:
public object ConvertBack(
object value,
Type targetType,
object parameter,
CultureInfo culture)
{
try
{
int minutes = System.Convert.ToInt32(value);
return new TimeSpan(0, minutes, 0);
}
catch
{
throw new FormatException("Please enter a number");
}
}
我在 XAML 绑定中设置了“ValidatesOnExceptions=True”。
但是,我遇到了以下 MSDN 文章,它解释了为什么上述方法不起作用:
"数据绑定引擎不会捕获用户提供的转换器抛出的异常。任何由 Convert 方法抛出的异常,或由 Convert 方法调用的方法抛出的任何未捕获的异常,都被视为运行时错误”
我已经读到'ValidatesOnExceptions 确实在 TypeConverters 中捕获了异常,所以我的具体问题是:
- 什么时候使用 TypeConverter 而不是 ValueConverter
- 假设 TypeConverter 不是上述问题的答案,我如何在 UI 中显示我的自定义错误消息
【问题讨论】:
-
WPF 数据绑定中的错误应该是透明的,因此一个小错误不会杀死整个应用程序或 UI。您可以记录异常,但尝试执行其他任何操作都会破坏数据绑定的设计。
标签: wpf data-binding ivalueconverter