Binding(四):數據校驗


​    除了上一節講的類型轉換器,Binding還自帶數據校驗功能,這節主要來講一下。

    跟類型轉換器一樣,數據校驗需要我們繼承ValidationRule類,實現其中的Validate方法,並寫入我們自定義的邏輯來完成校驗規則的制定,下面以文本框只能錄入數字的校驗規則來演示一下它的使用,請先看數據校驗的處理邏輯:

class NumberValidationRule : ValidationRule
{
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        if(int.TryParse(value.ToString(), out int defaultVal))
        {
            return new ValidationResult(true, null);
        }
        else
        {
           //第二個參數是錯誤描述信息
            return new ValidationResult(false, "Invalid Number");
        }
    }
}

    整體的代碼很簡單,它的返回值是統一的ValidationResult 類型, 驗證出錯后可以返回一些錯誤描述性數據。

    然后在后台將數據驗證的Binding設置到文本框(文本框名為txBox)中:

    當數據為正常的數字時,校驗通過,文本框無變化,當輸入非數字時,效果如下:

    文本框自動變紅。

    另外要了解一點,Binding的ValidationRules是個集合,也就是可以設置多個數據校驗。

    一般的,系統默認從源,也就是后台屬性中來的數據都是合法的,也就是不自動校驗從源來的數據,如下圖:

    如果需要校驗來自源的數據,需要做點改動,如下圖:

    將校驗對象的ValidatesOnTargetUpdated屬性設置為true。

 

    另外,我們看到,界面上並沒有顯示錯誤信息,這一點需要我們做一些特殊處理,我修改了一下布局:

    在文本框下添加了一個用於顯示錯誤信息的TextBlock,並添加了兩個事件,一個是驗證錯誤時觸發的Validation.Error事件,用於顯示錯誤信息,一個是TextChanged事件,用於校驗正確后清除錯誤信息,后台代碼如下:

    從事件參數中我們就能拿到錯誤對象,通過該對象的ErrorContent屬性就能拿到錯誤信息。同時,我們也可以通過Validation類來獲取錯誤數據,GetErrors方法可以獲取到錯誤數量,當沒有錯誤時,應該清掉錯誤信息,效果如下:

    既然可以通過Validation類獲取錯誤信息,我們也可以將兩個方法融合為一個,代碼如下:

    效果都是一樣的。   

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM