第10章-數(shù)據(jù)綁定和數(shù)據(jù)驗證_第1頁
第10章-數(shù)據(jù)綁定和數(shù)據(jù)驗證_第2頁
第10章-數(shù)據(jù)綁定和數(shù)據(jù)驗證_第3頁
第10章-數(shù)據(jù)綁定和數(shù)據(jù)驗證_第4頁
第10章-數(shù)據(jù)綁定和數(shù)據(jù)驗證_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第10章數(shù)據(jù)綁定和數(shù)據(jù)驗證2Ch10數(shù)據(jù)綁定和數(shù)據(jù)驗證10.1數(shù)據(jù)綁定10.2數(shù)據(jù)驗證10.1數(shù)據(jù)綁定10.1.1綁定模型和綁定模式10.1.2簡單數(shù)據(jù)綁定10.1.3復(fù)雜數(shù)據(jù)綁定410.1數(shù)據(jù)綁定數(shù)據(jù)綁定是應(yīng)用程序中UI與UI、UI與CLR對象之間建立連接的過程。通過數(shù)據(jù)綁定,可以將目標(biāo)的依賴項屬性與數(shù)據(jù)源的值綁定在一起,然后再根據(jù)綁定方式,決定當(dāng)源或目標(biāo)發(fā)生變化時,另一方是否也自動改變。510.1.1數(shù)據(jù)綁定模型和綁定模式WPF提供了3種數(shù)據(jù)綁定技術(shù):BindingMultiBinding、PriorityBinding這3種Binding的基類都是BindingBase.1.Binding類利用Binding類類可將目標(biāo)的附加屬性與數(shù)據(jù)源的值綁定在一起。數(shù)據(jù)源可以是任何修飾符為public的屬性,包括控件屬性、數(shù)據(jù)庫、XML或者CLR屬性等。610.1.1數(shù)據(jù)綁定模型和綁定模式1.Binding類綁定標(biāo)記擴展的特性語法格式為:<objectproperty="{Bindingdeclaration}".../>object為綁定目標(biāo),一般為WPF元素;property為目標(biāo)屬性;declaration為綁定聲明。綁定聲明可以有零個或多個,每個綁定聲明一般都以“綁定屬性=值”的形式來表示。綁定屬性是指Binding類提供的各種屬性值是指數(shù)據(jù)源。如果有多個聲明,各聲明之間用逗號分隔。710.1.1數(shù)據(jù)綁定模型和綁定模式1.Binding類綁定舉例:<SliderName="slide1"Maximum="100"/><TextBlockText="{BindingElementName=slide1,Path=Value}"/>也可以用屬性語法來描述。例如:<TextBlock><TextBlock.Text><BindingElementName="slide1"Path="Value"/></TextBlock.Text></TextBlock>810.1.1數(shù)據(jù)綁定模型和綁定模式1.Binding類Binding類提供的常用屬性及其含義。屬

性說

明Mode獲取或設(shè)置一個值,該值指示綁定的數(shù)據(jù)流方向。默認為DefaultPath獲取或設(shè)置綁定源的屬性路徑UpdateSourceTrigger獲取或設(shè)置一個值,該值確定綁定源更新的執(zhí)行時間點Converter獲取或設(shè)置要使用的轉(zhuǎn)換器StringFormat獲取或設(shè)置一個字符串,該字符串指定綁定值顯示為字符串的格式,其用法類似于ToString方法中的格式化表示形式TargetNullValue獲取或設(shè)置當(dāng)源的值為null時在目標(biāo)中使用的值910.1.1數(shù)據(jù)綁定模型和綁定模式2.BindingExpression類BindingExpression是維持綁定源與綁定目標(biāo)之間連接的基礎(chǔ)對象。一個Binding實例中可以包含多個BindingExpression實例。利用BindingExpression實例可以實現(xiàn)多個屬性共享同一個Binding對象。1010.1.1數(shù)據(jù)綁定模型和綁定模式2.BindingExpression類下面的C#代碼就可以讓r1和t1共享同一個名為b1的Binding實例:Bindingb1=newBinding(){ElementName=slide1.Name,Path=newPropertyPath(Slider.ValueProperty),StringFormat="[{0:##0}%]"};BindingOperations.SetBinding(r1,Rectangle.WidthProperty,b1);BindingOperations.SetBinding(t1,TextBlock.TextProperty,b1);1110.1.1數(shù)據(jù)綁定模型和綁定模式2.BindingExpression類通過對象名直接調(diào)用該對象的SetBinding方法實現(xiàn)綁定。r1.SetBinding(Rectangle.WidthProperty,b1);獲取某綁定控件的Binding對象或者BindingExpression對象,可用類似下面的C#代碼來實現(xiàn):Bindingb=BindingOperations.GetBinding(t1,TextBlock.TextProperty);BindingExpressionbe=BindingOperations.GetBindingExpression(t1,TextBlock.TextProperty);1210.1.1數(shù)據(jù)綁定模型和綁定模式3.綁定模型使用Binding對象建立綁定時,每個綁定都由4部分組成:綁定目標(biāo)、目標(biāo)屬性、綁定源、要使用的源值的路徑。1310.1.1數(shù)據(jù)綁定模型和綁定模式4.綁定模式WPF提供了5種綁定目標(biāo)屬性到源屬性的模式:OneWay、TwoWay、OneTime、OneWayToSource、Default。(1)OneWay單向綁定。當(dāng)源發(fā)生變化時目標(biāo)也自動發(fā)生變化。適用于被綁定的控件屬性為隱式只讀控件屬性的情況(如學(xué)號),或者目標(biāo)屬性沒有用于進行更改的控件接口的情況(如表的背景色)。1410.1.1數(shù)據(jù)綁定模型和綁定模式4.綁定模式(2)TwoWay雙向綁定。當(dāng)源或目標(biāo)有一方發(fā)生變化時,另一方也自動變化。這種綁定模式適用于可編輯或交互式的UI方案。<TextBoxText="{BindingElementName=listBox1,Path=SelectedItem.Content,Mode=TwoWay}"/>1510.1.1數(shù)據(jù)綁定模型和綁定模式4.綁定模式(3)OneTime單次綁定。當(dāng)應(yīng)用程序啟動或數(shù)據(jù)上下文(DataContext)發(fā)生更改時才更新目標(biāo),此后源的變化不再影響目標(biāo)。這種綁定模式適用于綁定靜態(tài)的數(shù)據(jù),它實質(zhì)上是OneWay綁定的簡化形式,在源值不更改的情況下可以提供更好的性能。1610.1.1數(shù)據(jù)綁定模型和綁定模式4.綁定模式(4)OneWayToSource反向綁定。當(dāng)目標(biāo)發(fā)生變化時源也跟著變化,這種方式與OneWay綁定剛好相反。(5)Default如果不聲明綁定模式,默認為Default,該方式自動獲取目標(biāo)屬性的默認Mode值。1710.1.1數(shù)據(jù)綁定模型和綁定模式5.綁定路徑語法(Path屬性)使用Path屬性可以指定將目標(biāo)綁定到數(shù)據(jù)源中的哪個屬性。(1)Path的值為源對象的屬性名。例如Path="Text"。(2)當(dāng)綁定到附加屬性時,需要用圓括號將其括起來,例如Path=(DockPanel.Dock)。(3)用方括號指定屬性索引器,還可以使用嵌套的索引器。例如,Path=list[0]。(4)在索引器內(nèi)部,可以使用多個由逗號分隔的索引器參數(shù),還可以使用圓括號指定每個參數(shù)的類型。例如,Path="[(sys:Int32)42,(sys:Int32)24]",其中sys映射到System命名空間。(5)如果源為集合視圖,則可以用斜杠(/)指定當(dāng)前項。(6)可以使用點(.)路徑綁定到當(dāng)前源。1810.1.1數(shù)據(jù)綁定模型和綁定模式【例10-1】演示綁定模式的含義及其基本用法。1910.1.2簡單數(shù)據(jù)綁定1.?dāng)?shù)據(jù)源對于數(shù)據(jù)源是單個數(shù)據(jù)的情況,有3種將目標(biāo)屬性綁定到源的方式。

ElementName:源是另一個WPF元素。

RelativeSource:源和目標(biāo)是同一個WPF元素。

Souce:源是一個CLR對象。這3種方式是相互排斥的,即每次只能使用其中的一種方式,否則將會引發(fā)異常。2010.1.2簡單數(shù)據(jù)綁定1.?dāng)?shù)據(jù)源(1)源是另一個WPF元素(ElementName屬性)Binding類的ElementName屬性用于指明數(shù)據(jù)源來自哪個元素。(2)源和目標(biāo)是同一個元素(RelativeSource屬性)數(shù)據(jù)源是相對于綁定目標(biāo)而言的,該屬性的默認值為null當(dāng)將對象的某個屬性綁定到它自身的另一個屬性,或者在樣式(Style)或模板(ControlTemplate)中使用數(shù)據(jù)綁定時,RelativeSource屬性很有用。(3)源是一個CLR對象(Source屬性)2110.1.2簡單數(shù)據(jù)綁定2.將目標(biāo)綁定到源控件中的某個屬性對于數(shù)據(jù)源是某個WPF控件且這些控件的屬性都是單個值的情況,目標(biāo)控件可通過Binding類的ElementName或者RelativeSource來指定綁定的源是哪個控件,通過Path指定綁定到源的哪個屬性。【例10-2】演示ElementName和RelativeSource的基本用法。2210.1.2簡單數(shù)據(jù)綁定3.通過控件模版指定源的屬性【例10-3】利用控件模版和數(shù)據(jù)綁定,模擬一個安裝在汽車上的速度計量表。2310.1.3復(fù)雜數(shù)據(jù)綁定對于復(fù)雜的數(shù)據(jù)綁定,可通過數(shù)據(jù)模板(DataTemplate)來實現(xiàn)。通過綁定到MyDb1數(shù)據(jù)庫中的Student表來演示復(fù)雜數(shù)據(jù)綁定的用法。1.控制更新源的時間通過UpdateSourceTrigger屬性控制更新數(shù)據(jù)源的時間。Explicit:用C#代碼調(diào)用BindingExpression的UpdateSource方法時才更新源。LostFocus:當(dāng)目標(biāo)控件失去焦點時自動更新源。PropertyChanged:目標(biāo)控件的綁定屬性每次發(fā)生更改時都會自動更新源。2410.1.3復(fù)雜數(shù)據(jù)綁定(2)INotifyPropertyChanged接口INotifyPropertyChanged接口只有一個成員:eventPropertyChangedEventHandlerPropertyChanged要在類中實現(xiàn)INotifyPropertyChanged接口,需要聲明一個PropertyChanged事件,并創(chuàng)建OnPropertyChanged方法引發(fā)該事件。(3)Wpfz中實現(xiàn)INotifyPropertyChanged接口的類2510.1.3復(fù)雜數(shù)據(jù)綁定2.?dāng)?shù)據(jù)類型轉(zhuǎn)換IValueConverter接口要將轉(zhuǎn)換器與綁定關(guān)聯(lián),一般先創(chuàng)建一個實現(xiàn)IValueConverter接口的類,然后實現(xiàn)兩個方法:Convert方法和ConvertBack方法。轉(zhuǎn)換器是分區(qū)域性的,所以Convert和ConvertBack方法都有指示區(qū)域性信息的culture參數(shù)。舉例:將日期類型轉(zhuǎn)換為字符串2610.1.3復(fù)雜數(shù)據(jù)綁定3.?dāng)?shù)據(jù)模板化對于復(fù)雜的數(shù)據(jù)綁定,可通過數(shù)據(jù)模板(DataTemplate)來實現(xiàn)。(1)用內(nèi)聯(lián)式定義DataTemplate設(shè)置控件的ItemTemplate屬性(2)將DataTemplate創(chuàng)建為資源若希望復(fù)用某個數(shù)據(jù)模板,一般將其定義為XAML資源。定義數(shù)據(jù)模板后,就可以用ItemsSource進行數(shù)據(jù)綁定,并用Itemtemplate指定使用的數(shù)據(jù)模板:(3)在DataTemplate中使用觸發(fā)器DataTrigger用于根據(jù)某個源屬性的值自動觸發(fā)顯示的外觀。2710.1.3復(fù)雜數(shù)據(jù)綁定4.通過DataContext將多個屬性綁定到相同的項對于將多個屬性綁定到某個相同的數(shù)據(jù)源的情況,為了簡化綁定路徑,可以在父元素中只聲明一次DataContext屬性,這樣一來,在子元素中就可以利用數(shù)據(jù)上下文實現(xiàn)多個目標(biāo)的綁定。在WPF中,綁定到集合實際上是通過將數(shù)據(jù)綁定到集合視圖來實現(xiàn)的。ItemsSource屬性默認使用OneWay綁定模式。2810.1.3復(fù)雜數(shù)據(jù)綁定【例10-4】演示利用DataContext實現(xiàn)數(shù)據(jù)綁定的基本用法。10.2數(shù)據(jù)驗證10.2.1正則表達式簡介10.2.2數(shù)據(jù)驗證基本概念10.2.3利用自定義驗證規(guī)則和正則表達式實現(xiàn)數(shù)據(jù)驗證3010.2.1正則表達式簡介正則表達式提供了靈活高效地處理文本字符串的方法。正則表達式的全面模式匹配表示法使程序員可以快速分析大量文本并找到特定的字符模式,能夠提取、編輯、替換或刪除文本字符串,也可以將提取的字符串添加到集合中。正則表達式由普通字符和元字符組成。普通字符指我們平常使用的字符。如字母、數(shù)字、漢字等;元字符指可以匹配某些字符形式的具有特殊含義的字符,其作用類似于DOS命令使用的通配符。3110.2.1正則表達式簡介1.基本書寫符號符號含

義示

例解

釋匹配輸入\轉(zhuǎn)義符\#符號“#”#[]可接收的字符列表[abcd]a、b、c、d中的任意1個字符a、b、c、d[^]不接收的字符列表[^abc]除a、b、c之外的任意1個字符,包括數(shù)字、漢字和特殊符號d、e、1、#|匹配“|”之前或之后的表達式ab|cdab或者cdab、cd()將子表達式分組(abc)將字符串a(chǎn)bc作為一組abc-連字符a-z任意單個小寫英文字母小寫字母3210.2.1正則表達式簡介2.限定符符號含

義示

例解

釋匹配輸入不匹配輸入*指定字符重復(fù)0次或n次(abc)*僅包含任意個abc的字符串a(chǎn)bc、abcabcabca、abca+指定字符重復(fù)1次或n次m+(abc)*以至少1個m開頭,后接任意1個abc的字符串m、mabc、mabcabcma、abc?指定字符重復(fù)0次或1次m+abc?以至少1個m開頭,后接ab或abc的字符串mab、mabc、

mmmab、mmabcab、abc、mabcc^指定起始字符^[0-9]+[a-z]*以至少1個數(shù)字開頭,后接任意1個小寫字母的字符串123、6aa、555edfabc、aaa、a33$指定結(jié)束字符^[0-9]\-[a-z]+$以1個數(shù)字開頭,后接連字符“–”,并以至少1個小寫字母結(jié)尾的字符串2-a、3-ddd、5-efg33a、8-、7-Ab{n}只能輸入n個字符[abcd]{3}由abcd中字母組成的任意長度為3的字符串a(chǎn)bc、dbc、adca、aa、dcbd{n,}至少輸入n個字符[abcd]{3,}由abcd中字母組成的任意長度不小于3的字符串a(chǎn)ab、dbc、aaabdca、cd、bb{n,m}輸入至少n個,至多m個字符的字符串[abcd]{3,5}由abcd中字母組成的任意長度不小于3,不大于5的字符串a(chǎn)bc、abcd、aaaaa、bcdabab、ababab、a3310.2.1正則表達式簡介3.匹配字符集匹配字符集是預(yù)定義的用于正則表達式中的符號集。符號含

義示

例解

釋匹配輸入不匹配輸入.匹配除換行(\n)之外的任何單個字符a..b以a開頭,b結(jié)尾,中間包括兩個任意字符的長度為4的字符串a(chǎn)aab、aefb、a35b、a#*bab、aaaa、a347b\d匹配單個數(shù)字字符,相當(dāng)于[0-9]\d{3}(\d)?包含3個或4個數(shù)字的字符串123、987612、01023\D匹配單個非數(shù)字字符,相當(dāng)于[^0-9]\D(\d)*以單個非數(shù)字字符開頭,后接任意一個數(shù)字字符串a(chǎn)、A342aa、AA78、1234符號含

義示

例解

釋匹配輸入不匹配輸入\w匹配單個數(shù)字、大小寫字母和漢字字符\d{3}\w{4}以3個數(shù)字字符開頭,后跟4個數(shù)字、字母或漢字的字符串234abcd、12345Pe58a、Ra46\W匹配單個除漢字、字母、數(shù)字以外的其他字符\W+\d{2}以至少1個非數(shù)字字母字符開頭,兩個數(shù)字字符結(jié)尾的字符串#29、#?@1023、#?@1003410.2.1正則表達式簡介4.分組構(gòu)造當(dāng)正則表達式比較復(fù)雜時,可以將其分組,以便捕獲子表達式組。表10-5所示為本章用到的部分分組構(gòu)造形式。分組構(gòu)造說

明()非命名捕獲,用于捕獲匹配的子字符串(或非捕獲組)。編號為零的第1個捕獲是由整個正則表達式模式匹配的文本,其他捕獲結(jié)果則根據(jù)左括號的順序從1開始自動編號(?<name>)命名捕獲,用于將匹配的子字符串捕獲到一個組名稱用數(shù)字代表的編號名稱中,也可以用單引號替代尖括號,例如

(?'name')3510.2.1正則表達式簡介5.正則表達式書寫舉例(1)至少1個字符:.{1,}。(2)3個“.”句點符號:\.{3}。(3)括號括起來的2~3個數(shù)字構(gòu)成的字符串:\([0-9]{2,3}\)。(4)必須包含ab的字符串:.{0,}ab.{0,}。(5)以字母開頭,允許包含字母、數(shù)字及下畫線,長度為5~16:[a-zA-Z][a-zA-Z0-9_

]{5,16}(6)國內(nèi)電話號碼:(\d{3}-|\d{4}-)?(\d{8}|\d{7})(7)至少3個漢字:[\u4e00-\u9fa5]{3,}3610.2.1正則表達式簡介【例10-5】演示正則表達式的基本用法。3710.2.2數(shù)據(jù)驗證基本概念WPF提供了兩種內(nèi)置的驗證規(guī)則,除此之外還可以自定義驗證規(guī)則。1.ValidationRule類(1)ValidatesOnTargetUpdated屬性

獲取或設(shè)置更新綁定目標(biāo)時是否執(zhí)行驗證規(guī)則(2)ValidationStep屬性該屬性獲取或設(shè)置什么時候執(zhí)行驗證規(guī)則(3)Validate方法要求擴充類必須實現(xiàn)這個方法3810.2.2數(shù)據(jù)驗證基本概念2.Binding類提供的與數(shù)據(jù)驗證有關(guān)的常用屬性

ValidatesOnExceptions屬性:獲取或設(shè)置是否包含ExceptionValidationRule。

ValidatesOnDataErrors屬性:獲取或設(shè)置是否包含Da

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論