[英]WPF ValidationRules does not fire on load
我在文本框中有一個ValidationRules
;
<TextBox Margin="5,5,5,0" Name="myTextBox" >
<Binding Path="myID" NotifyOnValidationError="True" ValidatesOnDataErrors="True" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" >
<Binding.ValidationRules>
<local:ValueCannotBlankValidator ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
現在,如果用戶在文本框中更改值,則此方法有效。 它不會在加載時觸發的問題。 認為這是將UpdateSourceTrigger="PropertyChanged"
更改為UpdateSourceTrigger="LostFocus"
的簡單解決方案,但不會導致ValidationRules
觸發。 謝謝您的幫助。
如果設置UpdateSourceTrigger="LostFocus"
,則在將輸入焦點設置為另一個控件時進行驗證,另一方面,每次更改文本時都會觸發UpdateSourceTrigger="PropertyChanged"
,其行為與TextBox的TextChanged事件非常相似。
ValidatesOnTargetUpdated="True"
確保在加載時驗證文本,您的XAML代碼正確。 如果在ValueCannotBlankValidator.Validate
方法中設置一個斷點, ValueCannotBlankValidator.Validate
可能會發現它實際上是在加載時觸發的。
我懷疑您的驗證器在第一次驗證時是否返回valid
結果,那時TextBox的Text屬性為null
,如果將null
與string.Empty ("")
進行比較,則會得到不正確的結果。
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
ValidationResult trueResult = new ValidationResult(true, "not blank");
string str = value as string; //value is null on load, don't compare it against ""
if (string.IsNullOrEmpty(str))
return new ValidationResult(false, "blank");
else
return trueResult;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.