2017-04-12 67 views
-1

我想創建自己的數據驗證系統,讓說調用方法導致

List<ValidationRule> list = new List<ValidationRule>(); 
list.Add(new ValidationRule(sometext, "Method regexTextValidation")); 
list.Add(new ValidationRule(phonenumeber, "Method regexPhoneValidation")); 
list.Add(new ValidationRule(somedate, "Method regexDateValidation")); 

我想通過它們來存儲,以便每個方法和循環的結果看,如果事情是錯誤的,如果是的話,有問題的領域。

編輯:

sometext是一個字符串和regexTextValidation是一個方法,我想一些東西,我想我會用字典Dictionary<int, Tuple<string, bool>> _DicValidationRules;去,我將這樣稱呼它_DicValidationRules.Add(1, new Tuple<string, bool>("some text", regexTextValidation("some text")));

回答

2

這而不是你如何在WPF中使用驗證規則。您通常在XAML中引用它們並將它們定義爲綁定。這裏是一個例子...

     <DataGridTextColumn Header="Value" EditingElementStyle="{StaticResource errorStyle}"> 
          <DataGridTextColumn.Binding> 
           <Binding Path="Value" NotifyOnValidationError="False" > 
            <Binding.ValidationRules> 
             <local:NumberValidationRule ValidationStep="RawProposedValue"/> 
            </Binding.ValidationRules> 
           </Binding> 
          </DataGridTextColumn.Binding> 
         </DataGridTextColumn> 

這個特定的驗證規則驗證用戶在文本字段中鍵入了一個大於0的數字。您可以有多個驗證規則,並且他們都必須返回一個真實的驗證結果或指示錯誤。

public class NumberValidationRule : ValidationRule 
{ 
    public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
    { 
     double v = 0.0; 
     if(double.TryParse(value as string, out v)) 
     { 
      if(v <= 0.0) 
      { 
       return new ValidationResult(false, "number must be greater than 0"); 
      } 
     } 
     else 
     { 
      return new ValidationResult(false, "entered value is not a number"); 
     } 
     return new ValidationResult(true, null); 
    } 
} 
相關問題