Silverlight:在验证错误时禁用按钮? (麻烦验证)
问题描述:
我在我的SL4应用程序中有一个类,代表用户输入数据的单个实体。我正在做数据验证如下:Silverlight:在验证错误时禁用按钮? (麻烦验证)
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
?
答
您可以在抛出异常的同时切换bool,并将Button的IsEnabled绑定到该bool。
您几乎可以使用WCF RIA Services执行任何验证任务 - 我建议您从Jeff Handleys最新的博客帖子开始,并从此处开始。 http://jeffhandley.com/archive/2010/09/22/RiaServicesStandardValidators.aspx
答
一个简单的解决方案将遵循这个forum thread所说的。如果您仅使用例外进行输入验证,则需要在控件的绑定中设置NotifyOnValidationError=True
,然后将在您的控件的BindingValidationError
事件中宣布任何错误。
如果您使用的是Silverlight 4,那么使用INotifyDataErrorInfo
当然更好。
答
- 您需要View Model中的一个属性来存储Button的IsEnabled属性的状态(您需要在XAML中绑定此属性)。
- 您现在需要创建一个委托+事件来检测和引发CostChange事件。
- 在视图模型,订阅此事件,并在1
右键定义IsEnabled属性,但不会我需要为每个验证领域的布尔? “IsValidName”,“IsValidDate”等。如果用户未能设置“Date”的输入,我不想再次启用按钮,直到对该字段提供有效输入。 – 2010-10-03 17:08:11
这是一个非常有用的博客文章。我在我的数据实体类的几个属性中添加了[[必需]]。但是,前端没有任何事情发生。我怎样才能使这个验证发生? – 2010-10-03 17:16:05