簡體   English   中英

WPF ValidationRules不會在加載時觸發

[英]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 ,如果將nullstring.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM