验证异常Silverlight验证

时间:2013-04-03 03:35:50

标签: c# silverlight silverlight-4.0

我在网格的DataTemplate列中验证文本框时遇到问题。文本框绑定的属性是“double”值。这是我的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 memeber

  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;
            }
        }

这是有效的(除了工具提示显示在错误的地方,但没关系)。我仍然无法理解为什么我的代码没有捕获任何异常。我有什么必须添加到我的模型类中吗?

2 个答案:

答案 0 :(得分:1)

如果将Visual Studio设置为中断用户未处理的异常,则在验证框架处理异常之前它将中断。调试时可以tell the debugger to ignore validation exceptions,这样验证框架可以在不中断执行的情况下处理异常。

答案 1 :(得分:-3)

你的setter代码抛出一个异常,你的调用/客户端代码是否处理/拦截异常?

很可能不是,这就是为什么你得到一个“不可处理的例外”。

一个简单的测试,更改throw异常以弹出一个消息框,unhandle异常将消失。