绑定 - 禁用属性抛出中断

时间:2016-02-18 14:50:06

标签: c# wpf debugging exception binding

使用异常验证

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

如果我输入废话(例如1asdkfjlsdfTextBox将获得红色边框。细

但是一旦我输入0,调试中断就会发生

我每次都要在调试栏上点击继续

如果没有调试,它会按预期工作:12093813asdf0值的红色边框。

问题:如何防止这种中断?

我可以取消检查特定的异常(屏幕截图上的箭头),但是当在其他地方发生此异常时我想要中断(例如,在某些方法中也会抛出模型逻辑ArgumentException)。我可以自己制作异常,抛出它并取消检查,但我也不满意。

1 个答案:

答案 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,了解为什么在调试之外的故障不会导致崩溃。它旨在失败,优雅,以防止简单的绑定问题导致更多的麻烦。您仍然会收到错误消息,但它只是被您隐藏了。