我在验证网格的 DataTemplate 列中的文本框时遇到问题。文本框绑定的属性是“双”值。这是我的 TextBox 的 xaml 代码
<TextBox Text="{Binding SubTotalRawHours, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}"
MinHeight="24" VerticalAlignment="Top" BindingValidationError="ValidateTime" />
这是财产
private double _SubTotalRawHours;
public double SubTotalRawHours
{
get { return _SubTotalRawHours; }
set
{
if (value < 0)
{
throw new Exception("Value not allowed");
}
_SubTotalRawHours = value;
NotifyPropertyChanged("SubTotalRawHours");
}
}
现在奇怪的问题是,如果我输入字母,代码会显示一个带有错误消息“输入格式不正确”的工具提示,这是正确的。但是如果我输入一个负值,我会得到一个异常“代码没有处理异常”。这是发生在这里
if (value < 0)
{
throw new Exception("Value not allowed");
}
我已经尝试了一切,我什至尝试将文本框放在网格之外,但它不起作用。
真的很感激这里的一些投入。
编辑 1
好的,现在我对代码进行了一些更改,我有一个解决方法,而不是"ValidatesOnExceptions=True"
,我有"ValidatesOnDataErrors=True"
,我的 Model 类现在也继承自IDataErrorInfo
并且我已经在我的类中实现了 IDataErrorInfo 成员
private string _dataError = string.Empty;
const string _ErrorsText = "Errors";
string IDataErrorInfo.Error
{
get { return _dataError; }
}
public string this[string propertyName]
{
get
{
_dataError = null;
switch (propertyName)
{
case "OldHours":
if (OldHours < 0 || OldHours > 100)
{
return "Please enter a value between 0 - 100.";
}
break;
}
return null;
}
}
这是有效的(除了工具提示显示在错误的位置,但这很好)。我仍然无法理解为什么我的代码没有捕获任何异常。有什么我必须添加到我的模型类中的吗?