WPF Binding轉換與校驗

2021-09-06 06:57:48 字數 4159 閱讀 9482

binding是wpf的核心,而資料的轉換與校驗是與binding配套的,其重要性不言而喻,前面介紹了wpf的binding,現在來看下converter&validation。本文目標是以簡單的demo展示converter&validation的用法。

binding用於資料有效性校驗的是binding的validationrules屬性,用於資料型別轉換的是binding的converter屬性。

當source端path所關聯的資料與target目標屬性資料型別不一致是,我們可以新增資料轉換器。給出乙個demo。

首先在xaml介面中定義乙個grid。

"

txtmsg

" text="

" foreground="

red" fontweight="

bold

" margin="

34,12,161,280

" />

"false

" margin="

34,48,44,21

" name="

datagrid1

" datacontext="

">

"id" width="

*" isreadonly="

true

">

"16" text="

" background="

}"/>

"name

" width="

2*" isreadonly="

true

">

"txtbox

" validation.errortemplate="

" validation.error="

txtbox_error

" >

"name

" notifyonvalidationerror="

true

" >

"true

" />

"age

" width="

*" isreadonly="

true

">

""/>

下面自定義乙個datatable物件,作為grid的資料來源。

using

system.data;

namespace

converterandvalidation

; dt.rows.add(dr);

}return

dt; }}}

binding如下:

datatable dt =classdata.getdatatable();

datagrid1.itemssource = dt.defaultview;

為了進行轉換需要實現ivalueconverter介面

using

system;

using

system.windows.data;

using

system.windows.media;

namespace

converterandvalidation

public

object convertback(object value, type targettype, object

parameter, system.globalization.cultureinfo culture)

#endregion

}}

如何消費這個idconverter呢?

新增乙個xmlns

xmlns:local="

clr-namespace:converterandvalidation

"

新增window.resources資源

"

idconverter1

"/>

在binding處

"

16" text="

" background="

}"/>

下面同樣以這個例子,寫資料校驗的demo。

為了進行校驗,需要準備乙個抽象類validationrule的派生類。

using

system.windows.controls;

namespace

converterandvalidation

return

new validationresult(false, "

error name,validation failed.");}}

}

如何消費這個validation?在window.resources中新增

"

namevalidationrule1

"/>

"

errortemplate

">

"red">invalid value!!!

binding部分

"

txtbox

" validation.errortemplate="

" validation.error="

txtbox_error

" >

"name

" notifyonvalidationerror="

true

" >

"true

" />

txtbox_error如下

private

void txtbox_error(object

sender, validationerroreventargs e)

else

//no error

}

程式的執行結果如下:

附:程式完整的xaml如下:

"

converterandvalidation.mainwindow

"xmlns="

"xmlns:x="

"xmlns:local="

clr-namespace:converterandvalidation

"title="

mainwindow

" height="

350" width="

525">

"idconverter1

"/>

"namevalidationrule1

"/>

"errortemplate

">

"red">invalid value!!!

"txtmsg

" text="

" foreground="

red" fontweight="

bold

" margin="

34,12,161,280

" />

"false

" margin="

34,48,44,21

" name="

datagrid1

" datacontext="

">

"id" width="

*" isreadonly="

true

">

"16" text="

" background="

}"/>

"name

" width="

2*" isreadonly="

true

">

"txtbox

" validation.errortemplate="

" validation.error="

txtbox_error

" >

"name

" notifyonvalidationerror="

true

" >

"true

" />

"age

" width="

*" isreadonly="

true

">

""/>

IFS日期校驗與數字校驗

在ifs 後台有時從外部匯入資料,直接資料oracle報錯資訊可讀性較差,現改進校驗過程,如下 procedure validate date value in varchar2,format in varchar2 is tmp date date begin tmp date to date v...

資料校驗validator 與 DWZ

在做系統時經常會用到資料校驗,資料校驗可以自己寫,也可以用現在成的,現在記錄下兩種類庫使用方法,validator 用data rule設定資料校驗的格式,如要加新的校驗型別只要在 zh cn.js檔案中新增正規表示式即可。如下 部分 rules 0 9 請輸入數字 positiveinteger ...

CRC校驗與RARP協議

crc cyclic redundancy check 迴圈冗餘檢驗。crc校驗 廣泛應用於資料鏈路層的差錯檢驗技術,保證資料傳輸的可靠性。crc校驗原理 傳送端 傳送資料 m 101001 冗餘碼即幀檢驗序列 fcs 的獲得 1 在crc演算法中,除數有乙個專有名稱叫做生成多項式。多項式p x x...