2014-09-05 107 views
0

我有一堆用數據驗證文本框所有如下:如何檢查ValidationResults按鈕點擊

XAML

<TextBox> 
    <TextBox.Text> 
     <Binding Path="Name" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged"> 
      <Binding.ValidationRules> 
       <local:Validation2/> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 

C#

public class Validation2 : ValidationRule 
{ 
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     double result; 
     return double.TryParse(value.ToString(), out result) == true ? new ValidationResult(true, null) : new ValidationResult(false, "error"); 
    } 
} 

這工作得很好,每當我在文本框中輸入除數字之外的任何內容都會彈出一個錯誤消息。現在我有一個按鈕來發送「表單」,我希望按鈕在做任何事情之前檢查是否有任何驗證錯誤。我將如何去做這件事。

回答

0

在將新值應用於源屬性之前進行驗證。在你的情況 - 當你改變財產。在wpf也有幾個more的情況下,但沒有OnFormClosing或類似。它的設計是:控制屬性可能會綁定到其他控件屬性(或綁定到相同屬性的幾個控件),因此最近在您更改焦點時進行驗證。

如果你沒有交叉綁定,一個屬性只綁定到一個控件,那麼當表單即將關閉時,你可以利用UpdateSourceTrigger.Explicit - 每個綁定都調用UpdateSource()

其他解決方案將不會顯示錯誤爲彈出窗口。錯誤狀態可能是紅色邊框或附近的!圖標。

我自己根本不使用驗證機制。相反,我擁有自我驗證的控件,例如TextBox與屬性IsDouble啓用自動驗證double值和屬性GetDouble,以解析值。我更喜歡在最後驗證所有內容,同時顯示實際狀態,如果驗證結果爲好或不對用戶(紅色邊框,閃爍標題等。每控制)。

+0

我使用單詞形式是一個糟糕的主意。基本上我有一個窗口,有一堆文本框和一個按鈕,可以創建輸入的所有數據的XML文件。如果有任何驗證錯誤,我希望按鈕不要創建文件。 – user3692104 2014-09-05 15:08:23

0

你可以做到Clientside和Serverside(用於禁用Javascript的劑量)。 您可以在您的Projectoptions中指定的客戶端。我認爲它叫做驗證。在Serverside上您可以檢查模型狀態,然後再運行其他代碼。

+0

我搞砸了標籤嗎?這與Javascript無關:P – user3692104 2014-09-05 13:28:29