在我的代码中我是这样的:
class Data
{
private int valore;
public int Valore
{
get
{
return valore;
}
set
{
if (value > 10 || value < 0)
{
throw new ArgumentException("Insert a value between 0 and 10");
}
valore = value;
}
}
}
然后我:
Data dati = new Data { Valore = 6 };
public MainWindow()
{
InitializeComponent();
this.DataContext = dati;
}
在XAML中我已经:
<TextBox Height="23" Width="120" Text="{Binding Path=Valore, Mode=TwoWay, ValidatesOnExceptions=True}"
问题是当我插入一个大于10的值时,我看不到TextBox
周围的红色边框,而是我的应用程序抛出一个未处理的异常。
答案 0 :(得分:1)
你这样做不正确,你的程序从未处理的异常崩溃的原因是你正在抛出和未处理的异常。
答案 1 :(得分:1)
对于DataValidatation,您需要执行以下操作:
在数据类中实现System.ComponentModel.IDataErrorInfo
您需要将ValidationRule添加到Binding
答案 2 :(得分:0)
调试器似乎忽略了这里生成的异常实际上被绑定引擎捕获的事实。当您在Visual Studio外部启动程序时,您应该获得所需的行为。
为避免调试器中断验证,您可以使用
public int Valore
{
get { //... }
[System.Diagnostics.DebuggerStepThrough()]
set { //... }
}
或者,更好的是,不要使用异常进行数据验证,而是查看IDataErrorInfo interface。毕竟,无效的用户输入并不是例外,而是常态。 =)
答案 3 :(得分:0)
在文本绑定绑定
上使用ValidationRules属性 <TextBox>
<TextBox.Text>
<Binding Path=Valore, Mode=TwoWay>
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
如果输入错误的值,文本框边框将变为红色
答案 4 :(得分:0)
有许多方法可以执行验证。如果您正在使用MVVM,则可能需要IDataErrorInfo
。
我会将其与FluentValidation配对以简化操作。