2013-04-03 62 views
1

我在验证网格的DataTemplate列中的文本框时遇到问题。文本框绑定的属性是一个“double”值。这是我对TextBox验证异常Silverlight验证

<TextBox Text="{Binding SubTotalRawHours, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}" 
               MinHeight="24" VerticalAlignment="Top" BindingValidationError="ValidateTime" /> 

这里XAML代码属性

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

OK,现在我已经做了一些改动的代码,我有一个解决办法,而不是"ValidatesOnExceptions=True",我已经"ValidatesOnDataErrors=True"和我的模型类现在还从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; 
      } 
     } 

这是(从显示在错误的地方提示除了但这是罚款)工作。我仍然不明白为什么我的代码没有发现任何异常。有什么我不得不添加到我的模型类?

+0

内部异常即将出现为空。 –

+0

我认为很难说确切的问题。你可以给我们提供更多的细节。因为从这里没有任何错误。 –

+0

看看这篇文章我试图按照它http://www.codeproject.com/Articles/86955/Silverlight-4-Data-Validation-Tip-of-the-Day-Part此外,我不知道我可以提供哪些其他信息? –

回答

1

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

+0

非常感谢。我想我昨天在一个单独的线程中问了你这个问题,你提出了一个相似的答案。我也经历了几篇文章,提出相同的建议,但我不确定,因为它看起来更像是一种解决方法,而不是解决方案。最后,我使用了“ValidatesOnDataErrors = True”,然后在IDataErrorInfo属性中实施验证。阅读您提供的文章看起来是唯一的修复方法。如果是这样,那么微软应该提供更好的silverlight验证或至少更好的文档。 –

+0

我个人并没有这个问题,出于某种原因,我必须在Visual Studio中更改一些设置或其他内容,所以它看起来有点碰巧。很高兴你把事情解决了 ;) – Alyce

-3

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

最有可能不是,这就是为什么你得到一个“unhandle异常”。

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

+0

多数民众赞成我认为,但如果你看看任何silverlight验证文章或教程,你会看到,你不需要添加一个排他性的事件处理程序来处理它。“ValidatesOnExceptions = True”是假设处理所有的异常。但是为了测试它,我添加了一个evenHandler BindingValidationError =“ValidateTime”来捕获异常,但那也不起作用。 –