【发布时间】: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