總結(jié)WPF的綁定

Binding是用來(lái)實(shí)現(xiàn)界面控件的屬性與后臺(tái)數(shù)據(jù)之間的綁定也祠,通過(guò)這種形式將前臺(tái)界面與后臺(tái)數(shù)據(jù)聯(lián)系在一起達(dá)到界面與數(shù)據(jù)耦合的目的恋脚。

WPF綁定引擎從 Binding 對(duì)象獲取有關(guān)以下內(nèi)容的信息: 源對(duì)象和目標(biāo)對(duì)象歼捏,數(shù)據(jù)流的方向处嫌,通過(guò)binding的模式來(lái)確定數(shù)據(jù)綁定的方向,一共有五種模式(Default偎球,OneTime洒扎,OneWay,OneWayToSource衰絮,TwoWay)逊笆,值轉(zhuǎn)換器通過(guò)將 Converter 屬性設(shè)置數(shù)據(jù)轉(zhuǎn)換成所指定的值,每個(gè)Binding對(duì)象都有一個(gè)ValidationRules屬性岂傲,可以被設(shè)置為一個(gè)或多個(gè)派生自ValidationRule的對(duì)象,每個(gè)規(guī)則都會(huì)檢查特定的條件并更具結(jié)果來(lái)標(biāo)記數(shù)據(jù)的有效性子檀。


總得來(lái)說(shuō)镊掖,可以分為一下幾種:?對(duì)象間的綁定·?綁定到集合·?數(shù)據(jù)模板乃戈,多值綁定。

直接綁定某個(gè)key

? ? ? ?在xaml中亩进,某些key被寫(xiě)成一個(gè)資源症虑,例如字符串,數(shù)值類(lèi)型归薛,那么其本身就是一個(gè)數(shù)據(jù)谍憔,這時(shí)候可以直接綁定key,那么此時(shí)這個(gè)path就可以直接寫(xiě)成一個(gè)點(diǎn)(.)主籍,另外此時(shí)這個(gè)path也可以省略不寫(xiě)习贫,直接綁定source。


數(shù)據(jù)源是控件的依賴屬性

? ? ? ? 這個(gè)是在項(xiàng)目上使用特別多的一種綁定源千元,依賴屬性不僅是可以是一個(gè)目標(biāo)也可以是一個(gè)數(shù)據(jù)源苫昌,直接綁定其他控件的依賴屬性,此時(shí)通過(guò)綁定控件的名字以及綁定的路徑和綁定模式幸海,一般是默認(rèn)祟身,默認(rèn)模式不是每個(gè)控件都是一樣的,這個(gè)模式就決定了數(shù)據(jù)的流向物独。


使用RelativeSource綁定

? ?當(dāng)我們控件不能夠通過(guò)名字找到源的時(shí)候可以通過(guò)RelativeSource去找到控件袜硫,通過(guò)相對(duì)的位置去找尋源,RelativeSource模式有三種,TemplatedParent偎蘸、Self和FindAncestor漱受。

第一種是通過(guò)自身:

通過(guò)TemplatedParent找尋父控件作為自身的源。

通過(guò)找尋祖先控件作為自己的源憨攒,可以指定是第幾層,AncestorLevel屬性指定的是以Binding目標(biāo)控件為起點(diǎn)的層級(jí)偏移量阀参。AncestorType屬性告訴Binding去找什么類(lèi)型的對(duì)象作為自己的源肝集,不是這個(gè)類(lèi)型的對(duì)象會(huì)被跳過(guò)。


使用Datacontext作為數(shù)據(jù)源

? ? ? ?WPF的UI布局是樹(shù)形結(jié)構(gòu)蛛壳,這個(gè)樹(shù)的每個(gè)節(jié)點(diǎn)都是控件杏瞻,都有DataContext屬性。這一點(diǎn)非常重要衙荐,因?yàn)楫?dāng)一個(gè)Binding只知道自己的Path而不知道自己的源的時(shí)候捞挥,它會(huì)沿著樹(shù)的一路向樹(shù)的根部找過(guò)去,每經(jīng)過(guò)一個(gè)節(jié)點(diǎn)都要查看這個(gè)節(jié)點(diǎn)的DataContext屬性是否具有Path所指定的屬性忧吟,在項(xiàng)目中如果一個(gè)對(duì)象的數(shù)據(jù)被頻繁的使用砌函,那么可以使用datacontext綁定是一個(gè)很常用的方法,當(dāng)一個(gè)綁定沒(méi)有顯式的源對(duì)象時(shí),WPF會(huì)遍歷邏輯樹(shù)找到一個(gè)非空的DataContext讹俊。



總結(jié):對(duì)于對(duì)象間的綁定垦沉,綁定源為ElementName,Path為綁定源屬性,以下的幾個(gè)屬性是來(lái)源之一仍劈。

使用集合作為源

? ? ? ? 在項(xiàng)目開(kāi)發(fā)中會(huì)經(jīng)常使用到集合列表的控件厕倍,WPF中的列表式控件都派生自ItemControl類(lèi),自然也繼承了ItemSource這個(gè)屬性贩疙。ItemSource可以接收一個(gè)IEnumerable接口派生類(lèi)的實(shí)例作為自己的值(所有可被迭代遍歷的集合都實(shí)現(xiàn)了這個(gè)接口讹弯,所以基本上C#集合都可以作為數(shù)據(jù)源)。



對(duì)于集合的綁定这溅,通常會(huì)需要用到以下幾個(gè)標(biāo)記:

使用ADO.NET對(duì)象作為Binding的源

使用ADO.NET的Dataset對(duì)象的DataTable作為數(shù)據(jù)源组民。


把ObjectDataProvider指定為Source:當(dāng)數(shù)據(jù)源的數(shù)據(jù)不是通過(guò)屬性,而是通過(guò)方法暴露給外界的時(shí)候芍躏,我們可以使用這種對(duì)象來(lái)包裝數(shù)據(jù)源再把它們指定為Source邪乍。

使用XmlDataProvider把XML數(shù)據(jù)指定為Source:一些WPF控件是級(jí)聯(lián)的(如Treeview和Menu),我們可以把樹(shù)狀結(jié)構(gòu)的XML數(shù)據(jù)作為源指定給與之關(guān)聯(lián)的Binding对竣。

把使用LINQ檢索到的數(shù)據(jù)作為數(shù)據(jù)源:使用LINQ的查詢結(jié)果指定為數(shù)據(jù)源庇楞。

多值綁定MultiBinding

當(dāng)有目標(biāo)需要多個(gè)數(shù)據(jù)源共同組合的結(jié)果時(shí),需要用到多重綁定否纬÷郎危可以通過(guò)轉(zhuǎn)換器將多個(gè)數(shù)據(jù)源值轉(zhuǎn)換成一個(gè)目標(biāo)值。



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末临燃,一起剝皮案震驚了整個(gè)濱河市睛驳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌膜廊,老刑警劉巖乏沸,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異爪瓜,居然都是意外死亡蹬跃,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)铆铆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蝶缀,“玉大人,你說(shuō)我怎么就攤上這事薄货∥潭迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵谅猾,是天一觀的道長(zhǎng)柄慰。 經(jīng)常有香客問(wèn)我鳍悠,道長(zhǎng),這世上最難降的妖魔是什么先煎? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任贼涩,我火速辦了婚禮,結(jié)果婚禮上薯蝎,老公的妹妹穿的比我還像新娘。我一直安慰自己谤绳,他們只是感情好占锯,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著缩筛,像睡著了一般消略。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瞎抛,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天艺演,我揣著相機(jī)與錄音,去河邊找鬼桐臊。 笑死胎撤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的断凶。 我是一名探鬼主播伤提,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼认烁!你這毒婦竟也來(lái)了肿男?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤却嗡,失蹤者是張志新(化名)和其女友劉穎舶沛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體窗价,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡如庭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了舌镶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柱彻。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖餐胀,靈堂內(nèi)的尸體忽然破棺而出哟楷,到底是詐尸還是另有隱情,我是刑警寧澤否灾,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布卖擅,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏惩阶。R本人自食惡果不足惜挎狸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望断楷。 院中可真熱鬧锨匆,春花似錦、人聲如沸冬筒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舞痰。三九已至土榴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間响牛,已是汗流浹背玷禽。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呀打,地道東北人矢赁。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像聚磺,于是被迫代替她去往敵國(guó)和親坯台。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359