Silverlight:验证错误时禁用Button? (验证麻烦)

时间:2010-10-03 16:44:35

标签: c# silverlight

我的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的情况下执行此操作?

3 个答案:

答案 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)

  1. 您需要View Model中的属性来存储Button的IsEnabled属性的状态(您需要在XAML中绑定此属性)。
  2. 您现在需要创建一个委托+事件来检测和提升CostChange事件。
  3. 在视图模型中,订阅此事件并设置在1中定义的IsEnabled属性。