WPF學習筆記(一) 資料繫結之元素到元素繫結

2022-02-22 08:09:50 字數 1966 閱讀 3534

作為乙隻菜鳥,之前學了一段時間的wpf,但是沒有總結,過了一學期發現好多東西都忘記了,很多東西還是需要記下來,以備後續複習。

資料繫結在事件中應用非常廣泛,可以有效地減少**量,那麼什麼是資料繫結?說的簡單就是從源物件提取一些資訊,將其用於設定目標物件的屬性,這裡有一點需要注意,目標屬性需要是依賴屬性(dependency property),而源物件可以是任何內容。

資料繫結可以分為元素到元素的繫結和元素到非元素物件的繫結。

首先來看乙個簡單的例子

示例文字

通過改變滑動條的值可以改變文字值,這裡使用了xaml來進行資料繫結,elementname=sldfontsize 表示繫結的源物件為上面的滑動條,path=value 表示源物件的屬性為滑動條的值,mode=twoway 表示使用雙向繫結。這裡有四種繫結模式

oneway

當源屬性變化時更新目標屬性

twoway

當源屬性變化時更新目標屬性,並且當目標屬性變化時更新源屬性

onetime

最初根據源屬性值設定目標屬性,然後後續其它改變均被忽略。必要時可以減少開銷

onewaytosource

與oneway相同,但是方向相反

default

此類繫結依賴於目標屬性,既可以雙向,也可以是單向,為預設值

使用雙向繫結需要更大的開銷,所以一般需要合理選擇繫結模式。

在xaml標記中使用binding標記拓展來宣告繫結表示式最為高效,但是有時候我們仍然需要使用**來建立繫結

binding bd = new binding();

bd.source = sldfontsize;

bd.path = new propertypath("value");

bd.mode = bindingmode.twoway;

txbsampletext.setbinding(fontsizeproperty, bd);

上述**完成的功能和用xaml建立是一樣的。但是明顯複雜不少,那麼在什麼時候需要使用**建立繫結呢

1.建立動態繫結:如果希望根據其他執行時資訊修改繫結,或者根據環境建立不同的繫結,這時使用**建立繫結更合理。

2.刪除繫結:如果希望刪除繫結,從而通過普通方式設定屬性,可以使用clearbinding()或clearallbinding()方法。

當然乙個元素可以使用多個繫結

示例文字

截圖如下

同時繫結的時候還有何時更新的問題,大部分繫結更新都是在propertychanged時出發,但是應該注意textbox.text的預設方式是lostfocus.

propertychanged

當目標屬性發生變化時立即更新源

lostfocus

當目標屬性發生變化且目標丟失焦點時更新源

explicit

除非呼叫bindingexpression.updatesource()方法,否則不更新源

default

根據目標屬性的元資料確定更新行為(根據frameworkpropertymetadata.defaultupdatetrigger屬性)

這裡也需要根據開銷合理選擇。

繫結延遲

如果需要在更新前暫停一會,可以新增短暫的延遲時間,避免過分頻繁的觸發操作,如在**中新增delay=500,即可在使用者停止輸入500毫秒後更新源物件。

在資料驅動的程式中,使用更多的是建立從不可見物件中提取資料的繫結表示式,唯一的要求是希望顯示的資訊必須儲存在公有屬性中,此時需要放棄binding.elementname屬性,轉而使用以下屬性之一

WPF元素繫結筆記

利用元素到元素的繫結實現互動方式的自動化 表示式繫結中,path 可以指向屬性,也可以指向屬性使用的索引器 如content.children 0 可構建具有多級層次的路徑,使其指向屬性的屬性,以此類推 繫結錯誤不會報出異常,但是輸出視窗會有提示 繫結模式 源物件 目標物件 oneway 目標物件 ...

學習WPF 元素繫結

概念 從源物件提取一些資訊,並用這些資訊設定目標物件的屬性 示例 在給textblock控制項的fontsize屬性賦值時,我們使用了繫結表示式 資料繫結表示式使用xaml的標記擴充套件 因此具有花括號 參見 這裡建立了乙個system.windows.data.binding物件,所以繫結表示式以...

學習WPF 元素繫結

概念 從源物件提取一些資訊,並用這些資訊設定目標物件的屬性 示例 在給textblock控制項的fontsize屬性賦值時,我們使用了繫結表示式 資料繫結表示式使用xaml的標記擴充套件 因此具有花括號 參見 這裡建立了乙個system.windows.data.binding物件,所以繫結表示式以...