上次介紹了超簡單的Binding設定方式,而這次就來好好的探討一下Binding資料流方向的差異吧。
上次介紹了超簡單的Binding設定方式,而這次就來好好的探討一下Binding資料流方向的差異吧。
Binding資料流方向的選項如下:
- Default:依照Binding的Property類別預設值決定Binding的模式,例如TextBox的Text和CheckBox的IsChecked屬性預設模式都是TwoWay。
- OneWay:由來源把值帶給目標,而之後來源值改變的話,目標會隨著更新。
- OneTime:由來源把值帶給目標,而且之後來源值改變的話也不會影響目標值。
- TwoWay:不管來源或是目標,只要有一方改變,另一方也會跟著更新。
- OneWayToSource:目標更新時,來源會隨之更新,但是來源更新時,目標並不會更新(Silverlight中不支援該方式,但是可以透過Mode=TwoWay ,UpdateSourceTrigger=Explicit來達到一樣的效果)。
而每種控制項預設的UpdateSourceTrigger也不盡相同,例如TextBox的Trigger就是在LostFocus上。
但是,怎麼所有的物件都可以跟TextBox做Binding,既可以Binding一個布林值,又可以Binding到double上??因為不同的屬性,也會具備不同的Converter,例如TextBox的Text屬性,就會預設使用內建的Converter把值自動套用ToString()方法,所以來什麼幾乎就可以吃什麼;但是,畢竟不是所有的值都可以被轉成ToString()就可以達到我們要的效果啊,例如說,我們想要把背景的顏色拿來綁定的話,背景的資料型態是一個SolidColorBrush,但是我們想要用文字方塊來輸入像FFFFFFFF的色碼,那就需要做一個資料轉換才能正常的Binding了!而在Silverlight和WPF中都可以透過實作一個IValueConverter的介面做到不同格式資料的轉換,更可依照自己的需求決定轉換器是單向或是雙向的喔!
看個小範例感受一下不同Binding方向的差異吧(可以直接玩看看,TextBox的值要觸發LostFocus才會更新喔!!):
就上面提到的顏色轉換器來說,它的實作程式碼如下(只要實作好Convert和ConvertBack就行啦):
一併附上專案原始檔:
這次就幫各位介紹到這個地方,我們下次見!!