Binding(四):資料校驗

Charles_Su發表於2021-07-06

​    除了上一節講的型別轉換器,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類獲取錯誤資訊,我們也可以將兩個方法融合為一個,程式碼如下:

    效果都是一樣的。   

 

 

相關文章