版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第10章數(shù)據(jù)綁定和數(shù)據(jù)驗(yàn)證2Ch10數(shù)據(jù)綁定和數(shù)據(jù)驗(yàn)證10.1數(shù)據(jù)綁定10.2數(shù)據(jù)驗(yàn)證10.1數(shù)據(jù)綁定10.1.1綁定模型和綁定模式10.1.2簡(jiǎn)單數(shù)據(jù)綁定10.1.3復(fù)雜數(shù)據(jù)綁定410.1數(shù)據(jù)綁定數(shù)據(jù)綁定是應(yīng)用程序中UI與UI、UI與CLR對(duì)象之間建立連接的過程。通過數(shù)據(jù)綁定,可以將目標(biāo)的依賴項(xiàng)屬性與數(shù)據(jù)源的值綁定在一起,然后再根據(jù)綁定方式,決定當(dāng)源或目標(biāo)發(fā)生變化時(shí),另一方是否也自動(dòng)改變。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)記擴(kuò)展的特性語法格式為:<objectproperty="{Bindingdeclaration}".../>object為綁定目標(biāo),一般為WPF元素;property為目標(biāo)屬性;declaration為綁定聲明。綁定聲明可以有零個(gè)或多個(gè),每個(gè)綁定聲明一般都以“綁定屬性=值”的形式來表示。綁定屬性是指Binding類提供的各種屬性值是指數(shù)據(jù)源。如果有多個(gè)聲明,各聲明之間用逗號(hào)分隔。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è)置一個(gè)值,該值指示綁定的數(shù)據(jù)流方向。默認(rèn)為DefaultPath獲取或設(shè)置綁定源的屬性路徑UpdateSourceTrigger獲取或設(shè)置一個(gè)值,該值確定綁定源更新的執(zhí)行時(shí)間點(diǎn)Converter獲取或設(shè)置要使用的轉(zhuǎn)換器StringFormat獲取或設(shè)置一個(gè)字符串,該字符串指定綁定值顯示為字符串的格式,其用法類似于ToString方法中的格式化表示形式TargetNullValue獲取或設(shè)置當(dāng)源的值為null時(shí)在目標(biāo)中使用的值910.1.1數(shù)據(jù)綁定模型和綁定模式2.BindingExpression類BindingExpression是維持綁定源與綁定目標(biāo)之間連接的基礎(chǔ)對(duì)象。一個(gè)Binding實(shí)例中可以包含多個(gè)BindingExpression實(shí)例。利用BindingExpression實(shí)例可以實(shí)現(xiàn)多個(gè)屬性共享同一個(gè)Binding對(duì)象。1010.1.1數(shù)據(jù)綁定模型和綁定模式2.BindingExpression類下面的C#代碼就可以讓r1和t1共享同一個(gè)名為b1的Binding實(shí)例: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類通過對(duì)象名直接調(diào)用該對(duì)象的SetBinding方法實(shí)現(xiàn)綁定。r1.SetBinding(Rectangle.WidthProperty,b1);獲取某綁定控件的Binding對(duì)象或者BindingExpression對(duì)象,可用類似下面的C#代碼來實(shí)現(xiàn):Bindingb=BindingOperations.GetBinding(t1,TextBlock.TextProperty);BindingExpressionbe=BindingOperations.GetBindingExpression(t1,TextBlock.TextProperty);1210.1.1數(shù)據(jù)綁定模型和綁定模式3.綁定模型使用Binding對(duì)象建立綁定時(shí),每個(gè)綁定都由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ā)生變化時(shí)目標(biāo)也自動(dòng)發(fā)生變化。適用于被綁定的控件屬性為隱式只讀控件屬性的情況(如學(xué)號(hào)),或者目標(biāo)屬性沒有用于進(jìn)行更改的控件接口的情況(如表的背景色)。1410.1.1數(shù)據(jù)綁定模型和綁定模式4.綁定模式(2)TwoWay雙向綁定。當(dāng)源或目標(biāo)有一方發(fā)生變化時(shí),另一方也自動(dòng)變化。這種綁定模式適用于可編輯或交互式的UI方案。<TextBoxText="{BindingElementName=listBox1,Path=SelectedItem.Content,Mode=TwoWay}"/>1510.1.1數(shù)據(jù)綁定模型和綁定模式4.綁定模式(3)OneTime單次綁定。當(dāng)應(yīng)用程序啟動(dòng)或數(shù)據(jù)上下文(DataContext)發(fā)生更改時(shí)才更新目標(biāo),此后源的變化不再影響目標(biāo)。這種綁定模式適用于綁定靜態(tài)的數(shù)據(jù),它實(shí)質(zhì)上是OneWay綁定的簡(jiǎn)化形式,在源值不更改的情況下可以提供更好的性能。1610.1.1數(shù)據(jù)綁定模型和綁定模式4.綁定模式(4)OneWayToSource反向綁定。當(dāng)目標(biāo)發(fā)生變化時(shí)源也跟著變化,這種方式與OneWay綁定剛好相反。(5)Default如果不聲明綁定模式,默認(rèn)為Default,該方式自動(dòng)獲取目標(biāo)屬性的默認(rèn)Mode值。1710.1.1數(shù)據(jù)綁定模型和綁定模式5.綁定路徑語法(Path屬性)使用Path屬性可以指定將目標(biāo)綁定到數(shù)據(jù)源中的哪個(gè)屬性。(1)Path的值為源對(duì)象的屬性名。例如Path="Text"。(2)當(dāng)綁定到附加屬性時(shí),需要用圓括號(hào)將其括起來,例如Path=(DockPanel.Dock)。(3)用方括號(hào)指定屬性索引器,還可以使用嵌套的索引器。例如,Path=list[0]。(4)在索引器內(nèi)部,可以使用多個(gè)由逗號(hào)分隔的索引器參數(shù),還可以使用圓括號(hào)指定每個(gè)參數(shù)的類型。例如,Path="[(sys:Int32)42,(sys:Int32)24]",其中sys映射到System命名空間。(5)如果源為集合視圖,則可以用斜杠(/)指定當(dāng)前項(xiàng)。(6)可以使用點(diǎn)(.)路徑綁定到當(dāng)前源。1810.1.1數(shù)據(jù)綁定模型和綁定模式【例10-1】演示綁定模式的含義及其基本用法。1910.1.2簡(jiǎn)單數(shù)據(jù)綁定1.?dāng)?shù)據(jù)源對(duì)于數(shù)據(jù)源是單個(gè)數(shù)據(jù)的情況,有3種將目標(biāo)屬性綁定到源的方式。
ElementName:源是另一個(gè)WPF元素。
RelativeSource:源和目標(biāo)是同一個(gè)WPF元素。
Souce:源是一個(gè)CLR對(duì)象。這3種方式是相互排斥的,即每次只能使用其中的一種方式,否則將會(huì)引發(fā)異常。2010.1.2簡(jiǎn)單數(shù)據(jù)綁定1.?dāng)?shù)據(jù)源(1)源是另一個(gè)WPF元素(ElementName屬性)Binding類的ElementName屬性用于指明數(shù)據(jù)源來自哪個(gè)元素。(2)源和目標(biāo)是同一個(gè)元素(RelativeSource屬性)數(shù)據(jù)源是相對(duì)于綁定目標(biāo)而言的,該屬性的默認(rèn)值為null當(dāng)將對(duì)象的某個(gè)屬性綁定到它自身的另一個(gè)屬性,或者在樣式(Style)或模板(ControlTemplate)中使用數(shù)據(jù)綁定時(shí),RelativeSource屬性很有用。(3)源是一個(gè)CLR對(duì)象(Source屬性)2110.1.2簡(jiǎn)單數(shù)據(jù)綁定2.將目標(biāo)綁定到源控件中的某個(gè)屬性對(duì)于數(shù)據(jù)源是某個(gè)WPF控件且這些控件的屬性都是單個(gè)值的情況,目標(biāo)控件可通過Binding類的ElementName或者RelativeSource來指定綁定的源是哪個(gè)控件,通過Path指定綁定到源的哪個(gè)屬性?!纠?0-2】演示ElementName和RelativeSource的基本用法。2210.1.2簡(jiǎn)單數(shù)據(jù)綁定3.通過控件模版指定源的屬性【例10-3】利用控件模版和數(shù)據(jù)綁定,模擬一個(gè)安裝在汽車上的速度計(jì)量表。2310.1.3復(fù)雜數(shù)據(jù)綁定對(duì)于復(fù)雜的數(shù)據(jù)綁定,可通過數(shù)據(jù)模板(DataTemplate)來實(shí)現(xiàn)。通過綁定到MyDb1數(shù)據(jù)庫中的Student表來演示復(fù)雜數(shù)據(jù)綁定的用法。1.控制更新源的時(shí)間通過UpdateSourceTrigger屬性控制更新數(shù)據(jù)源的時(shí)間。Explicit:用C#代碼調(diào)用BindingExpression的UpdateSource方法時(shí)才更新源。LostFocus:當(dāng)目標(biāo)控件失去焦點(diǎn)時(shí)自動(dòng)更新源。PropertyChanged:目標(biāo)控件的綁定屬性每次發(fā)生更改時(shí)都會(huì)自動(dòng)更新源。2410.1.3復(fù)雜數(shù)據(jù)綁定(2)INotifyPropertyChanged接口INotifyPropertyChanged接口只有一個(gè)成員:eventPropertyChangedEventHandlerPropertyChanged要在類中實(shí)現(xiàn)INotifyPropertyChanged接口,需要聲明一個(gè)PropertyChanged事件,并創(chuàng)建OnPropertyChanged方法引發(fā)該事件。(3)Wpfz中實(shí)現(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)建一個(gè)實(shí)現(xiàn)IValueConverter接口的類,然后實(shí)現(xiàn)兩個(gè)方法:Convert方法和ConvertBack方法。轉(zhuǎn)換器是分區(qū)域性的,所以Convert和ConvertBack方法都有指示區(qū)域性信息的culture參數(shù)。舉例:將日期類型轉(zhuǎn)換為字符串2610.1.3復(fù)雜數(shù)據(jù)綁定3.?dāng)?shù)據(jù)模板化對(duì)于復(fù)雜的數(shù)據(jù)綁定,可通過數(shù)據(jù)模板(DataTemplate)來實(shí)現(xiàn)。(1)用內(nèi)聯(lián)式定義DataTemplate設(shè)置控件的ItemTemplate屬性(2)將DataTemplate創(chuàng)建為資源若希望復(fù)用某個(gè)數(shù)據(jù)模板,一般將其定義為XAML資源。定義數(shù)據(jù)模板后,就可以用ItemsSource進(jìn)行數(shù)據(jù)綁定,并用Itemtemplate指定使用的數(shù)據(jù)模板:(3)在DataTemplate中使用觸發(fā)器DataTrigger用于根據(jù)某個(gè)源屬性的值自動(dòng)觸發(fā)顯示的外觀。2710.1.3復(fù)雜數(shù)據(jù)綁定4.通過DataContext將多個(gè)屬性綁定到相同的項(xiàng)對(duì)于將多個(gè)屬性綁定到某個(gè)相同的數(shù)據(jù)源的情況,為了簡(jiǎn)化綁定路徑,可以在父元素中只聲明一次DataContext屬性,這樣一來,在子元素中就可以利用數(shù)據(jù)上下文實(shí)現(xiàn)多個(gè)目標(biāo)的綁定。在WPF中,綁定到集合實(shí)際上是通過將數(shù)據(jù)綁定到集合視圖來實(shí)現(xiàn)的。ItemsSource屬性默認(rèn)使用OneWay綁定模式。2810.1.3復(fù)雜數(shù)據(jù)綁定【例10-4】演示利用DataContext實(shí)現(xiàn)數(shù)據(jù)綁定的基本用法。10.2數(shù)據(jù)驗(yàn)證10.2.1正則表達(dá)式簡(jiǎn)介10.2.2數(shù)據(jù)驗(yàn)證基本概念10.2.3利用自定義驗(yàn)證規(guī)則和正則表達(dá)式實(shí)現(xiàn)數(shù)據(jù)驗(yàn)證3010.2.1正則表達(dá)式簡(jiǎn)介正則表達(dá)式提供了靈活高效地處理文本字符串的方法。正則表達(dá)式的全面模式匹配表示法使程序員可以快速分析大量文本并找到特定的字符模式,能夠提取、編輯、替換或刪除文本字符串,也可以將提取的字符串添加到集合中。正則表達(dá)式由普通字符和元字符組成。普通字符指我們平常使用的字符。如字母、數(shù)字、漢字等;元字符指可以匹配某些字符形式的具有特殊含義的字符,其作用類似于DOS命令使用的通配符。3110.2.1正則表達(dá)式簡(jiǎn)介1.基本書寫符號(hào)符號(hào)含
義示
例解
釋匹配輸入\轉(zhuǎn)義符\#符號(hào)“#”#[]可接收的字符列表[abcd]a、b、c、d中的任意1個(gè)字符a、b、c、d[^]不接收的字符列表[^abc]除a、b、c之外的任意1個(gè)字符,包括數(shù)字、漢字和特殊符號(hào)d、e、1、#|匹配“|”之前或之后的表達(dá)式ab|cdab或者cdab、cd()將子表達(dá)式分組(abc)將字符串a(chǎn)bc作為一組abc-連字符a-z任意單個(gè)小寫英文字母小寫字母3210.2.1正則表達(dá)式簡(jiǎn)介2.限定符符號(hào)含
義示
例解
釋匹配輸入不匹配輸入*指定字符重復(fù)0次或n次(abc)*僅包含任意個(gè)abc的字符串a(chǎn)bc、abcabcabca、abca+指定字符重復(fù)1次或n次m+(abc)*以至少1個(gè)m開頭,后接任意1個(gè)abc的字符串m、mabc、mabcabcma、abc?指定字符重復(fù)0次或1次m+abc?以至少1個(gè)m開頭,后接ab或abc的字符串mab、mabc、
mmmab、mmabcab、abc、mabcc^指定起始字符^[0-9]+[a-z]*以至少1個(gè)數(shù)字開頭,后接任意1個(gè)小寫字母的字符串123、6aa、555edfabc、aaa、a33$指定結(jié)束字符^[0-9]\-[a-z]+$以1個(gè)數(shù)字開頭,后接連字符“–”,并以至少1個(gè)小寫字母結(jié)尾的字符串2-a、3-ddd、5-efg33a、8-、7-Ab{n}只能輸入n個(gè)字符[abcd]{3}由abcd中字母組成的任意長度為3的字符串a(chǎn)bc、dbc、adca、aa、dcbd{n,}至少輸入n個(gè)字符[abcd]{3,}由abcd中字母組成的任意長度不小于3的字符串a(chǎn)ab、dbc、aaabdca、cd、bb{n,m}輸入至少n個(gè),至多m個(gè)字符的字符串[abcd]{3,5}由abcd中字母組成的任意長度不小于3,不大于5的字符串a(chǎn)bc、abcd、aaaaa、bcdabab、ababab、a3310.2.1正則表達(dá)式簡(jiǎn)介3.匹配字符集匹配字符集是預(yù)定義的用于正則表達(dá)式中的符號(hào)集。符號(hào)含
義示
例解
釋匹配輸入不匹配輸入.匹配除換行(\n)之外的任何單個(gè)字符a..b以a開頭,b結(jié)尾,中間包括兩個(gè)任意字符的長度為4的字符串a(chǎn)aab、aefb、a35b、a#*bab、aaaa、a347b\d匹配單個(gè)數(shù)字字符,相當(dāng)于[0-9]\d{3}(\d)?包含3個(gè)或4個(gè)數(shù)字的字符串123、987612、01023\D匹配單個(gè)非數(shù)字字符,相當(dāng)于[^0-9]\D(\d)*以單個(gè)非數(shù)字字符開頭,后接任意一個(gè)數(shù)字字符串a(chǎn)、A342aa、AA78、1234符號(hào)含
義示
例解
釋匹配輸入不匹配輸入\w匹配單個(gè)數(shù)字、大小寫字母和漢字字符\d{3}\w{4}以3個(gè)數(shù)字字符開頭,后跟4個(gè)數(shù)字、字母或漢字的字符串234abcd、12345Pe58a、Ra46\W匹配單個(gè)除漢字、字母、數(shù)字以外的其他字符\W+\d{2}以至少1個(gè)非數(shù)字字母字符開頭,兩個(gè)數(shù)字字符結(jié)尾的字符串#29、#?@1023、#?@1003410.2.1正則表達(dá)式簡(jiǎn)介4.分組構(gòu)造當(dāng)正則表達(dá)式比較復(fù)雜時(shí),可以將其分組,以便捕獲子表達(dá)式組。表10-5所示為本章用到的部分分組構(gòu)造形式。分組構(gòu)造說
明()非命名捕獲,用于捕獲匹配的子字符串(或非捕獲組)。編號(hào)為零的第1個(gè)捕獲是由整個(gè)正則表達(dá)式模式匹配的文本,其他捕獲結(jié)果則根據(jù)左括號(hào)的順序從1開始自動(dòng)編號(hào)(?<name>)命名捕獲,用于將匹配的子字符串捕獲到一個(gè)組名稱用數(shù)字代表的編號(hào)名稱中,也可以用單引號(hào)替代尖括號(hào),例如
(?'name')3510.2.1正則表達(dá)式簡(jiǎn)介5.正則表達(dá)式書寫舉例(1)至少1個(gè)字符:.{1,}。(2)3個(gè)“.”句點(diǎn)符號(hào):\.{3}。(3)括號(hào)括起來的2~3個(gè)數(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)電話號(hào)碼:(\d{3}-|\d{4}-)?(\d{8}|\d{7})(7)至少3個(gè)漢字:[\u4e00-\u9fa5]{3,}3610.2.1正則表達(dá)式簡(jiǎn)介【例10-5】演示正則表達(dá)式的基本用法。3710.2.2數(shù)據(jù)驗(yàn)證基本概念WPF提供了兩種內(nèi)置的驗(yàn)證規(guī)則,除此之外還可以自定義驗(yàn)證規(guī)則。1.ValidationRule類(1)ValidatesOnTargetUpdated屬性
獲取或設(shè)置更新綁定目標(biāo)時(shí)是否執(zhí)行驗(yàn)證規(guī)則(2)ValidationStep屬性該屬性獲取或設(shè)置什么時(shí)候執(zhí)行驗(yàn)證規(guī)則(3)Validate方法要求擴(kuò)充類必須實(shí)現(xiàn)這個(gè)方法3810.2.2數(shù)據(jù)驗(yàn)證基本概念2.Binding類提供的與數(shù)據(jù)驗(yàn)證有關(guān)的常用屬性
ValidatesOnExceptions屬性:獲取或設(shè)置是否包含ExceptionValidationRule。
ValidatesOnDataErrors屬性:獲取或設(shè)置是否包含Da
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 九年級(jí)政治尊重他人是我的需要課件
- 液壓與氣動(dòng)技術(shù) 課件 模塊四 課題14
- 單位管理制度集合大合集職工管理篇
- 單位管理制度集粹匯編員工管理
- 議論文結(jié)構(gòu)的六種模式
- 單位管理制度匯編大合集人員管理
- 單位管理制度分享大全【人力資源管理】十篇
- 單位管理制度范例合集員工管理篇十篇
- 單位管理制度呈現(xiàn)合集【人力資源管理篇】十篇
- 萬有引力定律復(fù)習(xí)課件
- 2024版房屋市政工程生產(chǎn)安全重大事故隱患判定標(biāo)準(zhǔn)內(nèi)容解讀
- 江蘇省鎮(zhèn)江市實(shí)驗(yàn)學(xué)校2023-2024學(xué)年九年級(jí)上學(xué)期期末考試化學(xué)試卷
- 期末 (試題) -2024-2025學(xué)年人教PEP版(2024)英語三年級(jí)上冊(cè)
- GB/T 32066-2024煤基費(fèi)托合成液體石蠟
- 塔吊運(yùn)行作業(yè)方案
- 重慶中考數(shù)學(xué)最新26題練習(xí)及答案
- 江蘇衛(wèi)視跨年演唱會(huì)電視轉(zhuǎn)播技術(shù)方案-209年精選文檔
- 水電工程施工機(jī)械臺(tái)時(shí)費(fèi)定額(2004年版)
- 鋼鐵企業(yè)安全生產(chǎn)事故案例匯編
- 安慶市農(nóng)業(yè)雪災(zāi)恢復(fù)重建和救災(zāi)資金使用情況總結(jié)
- 食品工程原理課程設(shè)計(jì)攪拌器的設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論