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

时间:2013-02-21 14:28:22

标签: validation silverlight-5.0

我将文本框绑定到内存中的对象,该对象在输入错误值时抛出异常。

如果TextBox将ValidatesOnException设置为true且Mode = TwoWay,那么如果发生异常,它应该被Binding拦截,但事实并非如此。

TextBox看起来像:

    <TextBox Name="txtAge"
             Text="{Binding Age, Mode=TwoWay, ValidatesOnExceptions=True}"
              />

我在内存中创建了一个对象,并将layoutroot网格的DataContext设置为UserControl构造函数中创建的对象。

Student std = new Student();
LayoutRoot.DataContext = std;

绑定对象类型为:

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;
       }
   }
}

当数字&lt;时,属性Age抛出的异常0或&gt;输入100应该被拦截。

这是我期望的行为:

image1 http://s14.postimage.org/5ge63zjvl/image.jpg

但我得到了例外。

我正在通过此博客学习验证,我发现http://www.codeproject.com/Articles/86955/Silverlight-4-Data-Validation-Tip-of-the-Day-Part

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

我可以做什么设置?

提前致谢,

圣拉斐尔

1 个答案:

答案 0 :(得分:0)

您可以禁用所有用户未处理的异常中断,或者只是将异常添加到不会中断的异常列表中(来自here

转到调试 - &gt;例外 - &gt;并取消选中例外,即 System.ComponentModel.DataAnnotation.ValidationException

或者,根据评论here,在属性上应用[System.Diagnostics.DebuggerHidden()]属性。 (“请注意,您仍然可以获得VS Just-in-Time Debugger对话框,询问您是否要调试它。”)