1. 程式人生 > >WPF自學入門(七)WPF 初識Binding

WPF自學入門(七)WPF 初識Binding

依賴項 RM opacity 自身 date 數據傳遞 one 忽略 chang

今天記錄一下Binding的基礎和具體的使用方法,說起這個Binding,在WPF中,Binding是很重要的特征,在傳統的Windows軟件來看,大多數都是UI驅動程序的模式,也可以說事件驅動程序,這個程序模式在工作過幾年的程序員中是根深蒂固的,WPF作為Winform的升級,它把UI驅動程序徹底改變了,核心回到了數據驅動程序的模式上面,這樣,程序就回到了算法和數據。數據,才是真正需要重點處理的!

Binding在數據驅動程序模式中起著至關重要的作用,它最為重要的一個特點就是通訊,連接著前臺與後臺。首先看一下Binding最簡單的使用方法:

一、元素之間的綁定

技術分享圖片

這裏有3個控件,Slider,TextBox,Label,其中TextBox和Label都作為目標,Slider都作為數據源,把Slider中的值交由兩個控件體現,移動滑塊,TextBox會自動顯示Value的值,也就是FontSize的值。因為兩個綁定都設置了雙向綁定,所以可以在文本框中輸入值,然後丟失焦點,也能反饋回去。

看一下XAML中的綁定語句,這裏用的ElementName就是制定要綁定的對象的名字,Path就是要綁定的依賴項屬性,mode就是綁定方式,這裏需要說明的是mode有五種方式:

(1)OneWay 單向綁定

(2)TwoWay 雙向綁定

(3)OneTime,最初根據源屬性值設置目標屬性,以後就忽略所有改變,就是說,只進行初始化。

(4)OneWayToSource,這和OneWay相反

(5)Default,這是默認形式,它根據目標屬性自動設置。

如果把TextBox中的值修改成其他的,滑條位置沒有改變,字體大小也沒有改變,這是什麽回事呢?當TextBox失去焦點的時候,就會發生相應的改變了。這是因為這個綁定中的默認更新機制,更新機制Binding.UpdateSourceTrigger,這個屬性有4個枚舉值

(1)PropertyChange,當值改變的時候,就更新。

(2)LostFocus,當時去焦點的時候更新.

(3)Explicit,當調用BingingExpression.UpdateSource()方法的使用更新,其他情況不會更新。

(4)Default,默認形式

註意:以上這四種更新機制的設定,只會影響源數據,而不會影響目標數據。

技術分享圖片

二:元素自身的綁定

除了可以綁定別的元素,也可以綁定自身的其他屬性,例如Slider自身的Opacity屬性和自身的Value屬性綁定,當滑塊向左移動的時候,會逐漸隱藏起來。

技術分享圖片

三:後臺數據與元素之間的綁定

前面說了元素之間的綁定和元素自身的綁定,最後重點來了後臺數據和前臺元素的綁定,這種綁定方式很好地體現了數據驅動程序的運行模式。

首先新建Person類

技術分享圖片

頁面後臺代碼

技術分享圖片

顯示效果:

技術分享圖片

數據的綁定的方式已經寫完了。Binding是一條高速公路,那麽為了提高數據傳遞的合法性和有效性,我們要在這條高速公路中建立起一系列的關卡,有的用來轉換數據,有的用來校驗數據,下面就說一下Binding對數據的校驗和轉換。

(一)Binding的數據校驗

Binding的數據校驗工作是派生自ValidationRule類,並且對Validate方法進行重寫的自定義類!看一下實例:

技術分享圖片

先設計一個檢驗類,它繼承ValidationRule類並且重寫Validate方法。使用這個類的時候是創建Binding的時候設置校驗的。

代碼如下:

技術分享圖片

好了,看一下結果

技術分享圖片

因為設置了值傳過去的值不能是超過0~100之間,所以當超過了就顯示紅色邊框。在Binding中,默認是會認為數據源是肯定正確的,所以如果將TextBox作為數據源,而Slider作為目標,數據源輸入錯誤是沒有顯示的,那麽怎麽解決這個問題呢,設置VdataValidationRule.ValidatesOnTargetUpdated = true;

( 二)Binding的數據轉換

Binding還有另外一種機制稱為數據轉換,當Source端指定的Path屬性值和Target端指定的目標屬性不一致的時候,我們可以添加數據轉換器(Convert)。上面我們提到的問題實際上就是double和stirng類型相互轉換的問題,因為處理起來比較簡單,所以WPF類庫就自己幫我們做了,但有些數據類型轉換就不是WPF能幫我們做的了,當遇到這些情況,我們只能自己動手寫Converter,方法是創建一個類並讓這個類實現IValueConverter接口。

技術分享圖片

這個就是日期轉換類,它有兩個方法:

1.當值從綁定源傳播給綁定目標時,調用方法Convert

2.當值從綁定目標傳播給綁定源時,調用此方法ConvertBack,方法ConvertBack的實現必須是方法Convert的反向實現。

這兩個方法分別在裏面寫入怎麽轉換,轉換成什麽類型就是返回類型。

下面就是使用:

技術分享圖片

好了,把這個綁定的Converter屬性設置成我們設計的轉換類的實例就可以了。看一下程序的界面

技術分享圖片

WPF自學入門(七)WPF 初識Binding