2014-06-23 62 views
0

我將我的WPF表單綁定到類的十進制屬性。如果用戶輸入無效格式(字符串而不是十進制),文本框會自動加亮顯示爲紅色。但是,我想通過在將插入的數據存儲到數據庫之前進行驗證來使其更安全。在WPF綁定中設置十進制屬性的默認值

問題是,只要用戶輸入非十進制值,綁定將返回0而不是null或錯誤。所以它設法進入數據庫,沒有二級驗證。

驗證WPF綁定到小數的最佳方法是什麼?現在它不會返回null,所以我沒有任何方法來捕獲錯誤。

這裏是我如何綁定文本框

 <TextBox x:Name="stockTxtBx" Grid.Row="3" Grid.Column="1" Style="{StaticResource StandardBox}" Text="{Binding StockOnHand}"/> 

另外,我在哪裏可以修改添加驗證?

+0

我敢肯定[此頁](http://stackoverflow.com/questions/7575286/numeric-text-box-with-mvvm-pattern)會幫助你 – Prisoner

+0

@HaikalNashiha [也許谷歌翻譯](https: //translate.google.com.hk/translate?sl=de&tl=en&js=y&prev=_t&hl=zh-TW&ie=UTF-8&u=http%3A%2F%2Fblindmeis.wordpress.com%2F2010%2F06%2F01%2Fwpf- masked-textbox-behavior%2F&edit-text =&act = url) – Prisoner

+0

@HaikalNashiha [本頁同樣適合你](http://rubenhak.com/?p=8) – Prisoner

回答

2

的問題是,只要用戶輸入非十進制值,綁定將返回0,而不是空或錯誤

你在你上面的語句稍有不正確。

  1. 無效的文本導致紅色邊框(或其他裝飾取決於ErrorTemplate值)周圍出現:什麼當用戶輸入一個具有無效類型的特定領域的一些文字這其實情況TextBox
  2. 數據綁定的屬性值保持在已輸入

所以,你的情況最後一個有效值,即最後的有效值可能已被0,這就是爲什麼你認爲一個無效值總是會返回0。所以實際上,只有無效值被忽略,而最後一個有效值仍然存在。

但是,要改善此問題,您有幾個選項。一種方法是在保存數據之前檢查Validation.HasError Attached Property的值,然後。顯然,如果您檢測到存在任何錯誤,那麼您將彈出一條消息來提醒用戶,而不是繼續保存。您可以從Binding Validation.HasError property in MVVM問題中找到有關此方法的更多信息。

另一種選擇是限制特定TextBox的文本輸入,以便不可能輸入非數字鍵。我不會詳細討論如何在這裏再次執行此操作,而是傾向於請求您查看Numeric Data Entry in WPF問題的答案,這裏是Stack Overflow。