0

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

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

文本框看起来像:

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

应拦截输入数字 < 0 或 > 100 时属性 Age 引发的异常。

这是我期望的行为:

图像1

但我得到了例外。

我正在研究这个博客的验证,我发现http://www.codeproject.com/Articles/86955/Silverlight-4-Data-Validation-Tip-of-the-Day-Part

这是第8步,这应该是行为,作者解释了NotifyOnValidationError和BindingValidationError超出了这一步。

我可能无法进行哪些设置?

提前致谢,

拉斐尔

4

1 回答 1

0

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

转到Debug -> Exceptions -> 并取消选中异常,即System.ComponentModel.DataAnnotation.ValidationException

或者,从此处的评论中,将[System.Diagnostics.DebuggerHidden()]属性应用于属性。(“请注意,您可能仍会收到 VS Just-in-Time Debugger 对话框,询问您是否要调试它。”)

于 2013-04-03T07:19:11.623 回答