【问题标题】:Databinding validation does not catch exceptions数据绑定验证不会捕获异常
【发布时间】:2013-02-21 14:28:22
【问题描述】:

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

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

应该拦截输入100时属性Age引发的异常。

这是我期望的行为:

但我得到了例外。

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

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

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

提前致谢,

拉斐尔

【问题讨论】:

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

标签: validation silverlight-5.0


【解决方案1】:

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

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

或者,从评论here 中,对属性应用[System.Diagnostics.DebuggerHidden()] 属性。 (“请注意,您可能仍会看到 VS Just-in-Time Debugger 对话框,询问您是否要对其进行调试。”)

【讨论】:

    猜你喜欢
    • 2015-04-16
    • 2020-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 2021-04-02
    相关资源
    最近更新 更多