验证异常Silverlight验证
本文关键字:验证 Silverlight 异常 | 更新日期: 2023-09-27 18:07:05
我在验证网格的DataTemplate列中的文本框时遇到了问题。文本框绑定到的属性是一个"double"值。这是我的文本框的xaml代码
<TextBox Text="{Binding SubTotalRawHours, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}"
MinHeight="24" VerticalAlignment="Top" BindingValidationError="ValidateTime" />
这里是属性
private double _SubTotalRawHours;
public double SubTotalRawHours
{
get { return _SubTotalRawHours; }
set
{
if (value < 0)
{
throw new Exception("Value not allowed");
}
_SubTotalRawHours = value;
NotifyPropertyChanged("SubTotalRawHours");
}
}
现在奇怪的问题是,如果我输入字母,代码显示一个工具提示错误消息"输入格式不正确",这是正确的。但是如果我输入一个负值,我得到一个异常"异常未被代码处理"。
if (value < 0)
{
throw new Exception("Value not allowed");
}
我已经尝试了一切,我甚至试图把文本框外面的网格,但它不工作。
非常感谢您的意见。
编辑1
好的,现在我对代码做了一些改变,我有一个解决方案,而不是"ValidatesOnExceptions=True"
,我有"ValidatesOnDataErrors=True"
和我的模型类现在也继承自IDataErrorInfo
和我已经实现了IDataErrorInfo成员在我的类
private string _dataError = string.Empty;
const string _ErrorsText = "Errors";
string IDataErrorInfo.Error
{
get { return _dataError; }
}
public string this[string propertyName]
{
get
{
_dataError = null;
switch (propertyName)
{
case "OldHours":
if (OldHours < 0 || OldHours > 100)
{
return "Please enter a value between 0 - 100.";
}
break;
}
return null;
}
}
这是工作(除了工具提示显示在错误的地方,但这很好)。我仍然不明白为什么我的代码没有捕获任何异常。有什么我必须添加到我的模型类吗?
如果Visual Studio设置为在用户未处理的异常时中断,它将在验证框架处理异常之前中断。您可以告诉调试器在调试时忽略验证异常,这样可以让验证框架处理异常而不中断执行。
你的setter代码抛出一个异常,你的调用/客户端代码处理/拦截异常吗?
很可能不是,这就是为什么你得到一个"unhandle异常"。
一个简单的测试,将抛出异常改为弹出一个消息框,unhandle异常将消失