我的SL4应用程序中有一个类,表示用户正在输入数据的单个实体。我正在进行如下数据验证:
private double cost;
public string Cost
{
get
{
return String.Format("{0}{1}", DOLLAR_SYMBOL, cost);
}
set
{
string price = getPriceFromCost(value);
if (!double.TryParse(price, out cost))
{
throw new ArgumentException("Please enter a number.");
}
OnPropertyChanged("Cost");
}
}
这很有效。但是,如果用户输入有效值,然后输入无效值,忽略验证错误,并点击提交,则将使用旧的有效值创建实体。我宁愿强迫用户纠正错误。如何禁用“添加”按钮?
另外,当用户点击添加按钮时,我想做一些其他形式的验证,但我仍然希望文本输入框的效果突出显示为红色,并弹出消息。如何在不抛出ArgumentExceptions
的情况下执行此操作?
答案 0 :(得分:0)
您可以切换一个bool并抛出异常,并将Button的IsEnabled绑定到该bool。
您可以使用WCF RIA服务执行几乎任何验证任务 - 我建议您从Jeff Handleys的最新博客文章开始,并从那里开始。 http://jeffhandley.com/archive/2010/09/22/RiaServicesStandardValidators.aspx
答案 1 :(得分:0)
一个简单的解决方案是遵循此forum thread中的内容。如果您只使用输入验证的例外,那么您需要在控件的绑定中设置NotifyOnValidationError=True
,然后在您控件的BindingValidationError
事件中宣布任何错误。
如果您使用的是Silverlight 4,当然最好使用INotifyDataErrorInfo
。
答案 2 :(得分:0)