Validation 数据绑定验证不会捕获异常

Validation 数据绑定验证不会捕获异常,validation,silverlight-5.0,Validation,Silverlight 5.0,我将一个文本框绑定到内存中的一个对象,该对象在输入错误值时引发异常 如果TextBox将ValidatesOnException设置为true且Mode=TwoWay,那么如果发生异常,则绑定应拦截该异常,但实际情况并非如此 文本框看起来像: <TextBox Name="txtAge" Text="{Binding Age, Mode=TwoWay, ValidatesOnExceptions=True}" /> 绑定

我将一个文本框绑定到内存中的一个对象,该对象在输入错误值时引发异常

如果TextBox将ValidatesOnException设置为true且Mode=TwoWay,那么如果发生异常,则绑定应拦截该异常,但实际情况并非如此

文本框看起来像:

    <TextBox Name="txtAge"
             Text="{Binding Age, Mode=TwoWay, ValidatesOnExceptions=True}"
              />
绑定对象类型为:

public class Student {

   private string _name;
   public string Name {
       get { return _name; }
       set { _name = value; }
   }

   private int _age;
   public int Age {
       get { return _age; }
       set {
           if (value > 100 || value < 0) {
               throw new Exception("Please enter age between 0 - 100");
           }
           _age = value;
       }
   }
}
公共班级学生{
私有字符串\u名称;
公共字符串名{
获取{return\u name;}
设置{u name=value;}
}
私人互联网;
公共信息{
获取{return\u age;}
设置{
如果(值>100 | |值<0){
抛出新异常(“请输入0-100之间的年龄”);
}
_年龄=价值;
}
}
}
当输入的数字<0或>100时,属性Age引发的异常应该被拦截

这是我期望的行为:

但是我得到了一个例外

我正在用我找到的这个博客研究验证

这是第8步,这应该是行为,作者解释了这一步之外的NotifyOnValidationError和BindingValidationError

我可能无法进行什么设置

提前感谢,


Rafael

您可以禁用对所有用户未处理的异常的中断,或者只将异常添加到不中断的异常列表中(从)

转到调试->异常->并取消选中异常,即。 System.ComponentModel.DataAnnotation.ValidationException

或者,从注释中,对属性应用
[System.Diagnostics.DebuggerHidden()]
属性。
(“请注意,您可能仍然会看到VS实时调试器对话框,询问您是否要调试它。”

此外,我用VS2012打开了解决方案,并从那里运行了它,它成功了!后来我用VS2010打开了它,运行了它,异常仍然出现。VS2010中可能缺少什么设置?当屏幕上出现异常窗口时,您是否尝试过单击“继续”,而不是停止?@Alyce我遇到了类似的问题,我按照您的建议单击“继续”,然后它会显示消息。事实上,在搜索解决方案时,我在某个地方读到,这是可以的,因为我在调试模式下,它将在发布模式下正常工作。仍然不确定这是怎么可能的,但是你能确认一下这是否是你的意思吗?是的,根据“如果你在调试器之外运行应用程序,一切都会按照你的意愿运行。”
public class Student {

   private string _name;
   public string Name {
       get { return _name; }
       set { _name = value; }
   }

   private int _age;
   public int Age {
       get { return _age; }
       set {
           if (value > 100 || value < 0) {
               throw new Exception("Please enter age between 0 - 100");
           }
           _age = value;
       }
   }
}