2012-11-28 81 views
1

我有我查看一個文本框,具有有效性規則:WPF驗證規則更新反正

public class EmptyStringRule : ValidationRule 
{ 
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     if(String.IsNullOrEmpty(value.ToString())) 
      return new ValidationResult(true,"String Cannot be empty"); 
     return new ValidationResult(true,null); 
    } 
} 

當輸入一個空字符串。綁定屬性不會更新,並且文本框被標記爲紅色。我需要更新源代碼,但仍然在文本框周圍留下標記。 (輸入稍後由EF再次驗證)。

我該怎麼做?

回答

6

您可以通過驗證規則的ValidationStep屬性設置爲「UpdatedValue」做到這一點:

<Binding.ValidationRules> 
    <c:EmptyStringRule ValidationStep="UpdatedValue"/> 
</Binding.ValidationRules> 

請注意,這將導致被傳遞到驗證規則類,而不是實際的字段值的BindingExpression,所以您必須相應地修改您的驗證規則,以查詢更新字段的值。 (在我的例子綁定字符串屬性被稱爲MyViewModel.MyStringProperty):

public class EmptyStringRule : ValidationRule 
{ 
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     var be = value as BindingExpression; 
     if (be != null) 
     { 
      var item = be.DataItem as MyViewModel; 
      if (item != null) 
      { 
       if (String.IsNullOrEmpty(item.MyStringProperty)) 
       { 
        return new ValidationResult(false, "String Cannot be empty"); 
       } 
      } 
     } 
     return new ValidationResult(true, null); 
    } 
} 

有了這個設置時,文本設置爲空它實際上應該做的更新MyStringProperty,但仍然會做一個驗證。