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

       今天記錄一下Binding的基礎和具體的使用方法,提及這個Binding,在WPF中,Binding是很重要的特徵,在傳統的Windows軟件來看,大多數都是UI驅動程序的模式,也能夠說事件驅動程序,這個程序模式在工做過幾年的程序員中是根深蒂固的,WPF做爲Winform的升級,它把UI驅動程序完全改變了,核心回到了數據驅動程序的模式上面,這樣,程序就回到了算法和數據。數據,纔是真正須要重點處理的!程序員

        Binding在數據驅動程序模式中起着相當重要的做用,它最爲重要的一個特色就是通信,鏈接着前臺與後臺。首先看一下Binding最簡單的使用方法:算法

1、元素之間的綁定ide

 

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

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

(1)OneWay 單向綁定設計

(2)TwoWay 雙向綁定3d

(3)OneTime,最初根據源屬性值設置目標屬性,之後就忽略全部改變,就是說,只進行初始化。雙向綁定

(4)OneWayToSource,這和OneWay相反orm

(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屬性設置成咱們設計的轉換類的實例就能夠了。看一下程序的界面

相關文章
相關標籤/搜索