2013-04-03 96 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」來捕獲異常,但那也不起作用。 –