使用异常验证
<TextBox>
<Binding Path="Value"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox>
此属性
int _value = 1;
public int Value
{
get { return _value; }
set
{
if (value < 1)
throw new ArgumentException();
_value = value;
OnPropertyChanged();
}
}
如果我输入废话(例如1asdkfjlsdf
)TextBox
将获得红色边框。细
但是一旦我输入0
,调试中断就会发生
我每次都要在调试栏上点击继续。
如果没有调试,它会按预期工作:12093813asdf
或0
值的红色边框。
问题:如何防止这种中断?
我可以取消检查特定的异常(屏幕截图上的箭头),但是当在其他地方发生此异常时我想要中断(例如,在某些方法中也会抛出模型逻辑ArgumentException
)。我可以自己制作异常,抛出它并取消检查,但我也不满意。
答案 0 :(得分:1)
随机输入被ExceptionValidationRule
捕获,因为0983abcd
不是整数。 (更多内容,这里:https://msdn.microsoft.com/en-us/library/system.windows.controls.exceptionvalidationrule%28v=vs.110%29.aspx)
当您发送随机废话时,它无法通过string-&gt; int转换并触发ExceptionValidationRule
为您的方框着色。但是,当您发送0时,它会触发您的异常,这不在try / catch(未处理)内,然后推送到validaterule,它会注意到先前的异常并设置盒子到红色。
从我的评论中查看MSDN article,了解如何执行第二次验证以检查< 1
条件的一个很好的示例。 (您也可以完全替换ExceptionvalidationRule
。)
查看答案on this post,了解为什么在调试之外的故障不会导致崩溃。它旨在失败,优雅,以防止简单的绑定问题导致更多的麻烦。您仍然会收到错误消息,但它只是被您隐藏了。