1. 程式人生 > >WPF學習筆記:(二)資料繫結模式與INotifyPropertyChanged介面

WPF學習筆記:(二)資料繫結模式與INotifyPropertyChanged介面

資料繫結模式共有四種:OneTime、OneWay、OneWayToSource和TwoWay,預設是TwoWay。一般來說,完成資料繫結要有三個要點:目標屬性是依賴屬性、繫結設定和實現了INotifyPropertyChanged介面的資料來源(資料上下文)。

OneTime:一次性有效,之後資料來源的變化不會對目標屬性有任何影響;當然,目標屬性的改變也不對資料來源有影響。程式碼如下

  <TextBox Height="23" HorizontalAlignment="Left" Margin="174,38,0,0" Name="textBox1" Text="{Binding Path=MyName, Mode=OneTime}
" VerticalAlignment="Top" Width="120" />

OneWay:單向作用,資料來源的改變會反映到目標屬性上;但目標屬性的改變不對資料來源有影響。程式碼如下:

  <TextBox Height="23" HorizontalAlignment="Left" Margin="176,83,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" Text="{Binding Path=MyName, Mode=OneWay}" />

OneWayToSource:單向作用,跟OneWay的方向相反,目標屬性的改變會更新到資料來源上;但資料來源的更新不會通知目標屬性。在這種模式下,目標屬性值初始狀態一般為空,因為資料來源的值對其不起作用。程式碼如下: 

  <TextBox Height="23" HorizontalAlignment="Left" Margin="174,38,0,0" Name="textBox3" Text="{Binding Path=MyName, Mode=OneWayToSource}" VerticalAlignment="Top" Width="120" />

TwoWay:雙向作用,即目標屬性的改變會更新到資料來源上,資料來源的更新也會通知目標屬性。這是繫結的預設方式,可以省略。程式碼如下:

  <TextBox Height="23" HorizontalAlignment="Left" Margin="174,38,0,0" Name="textBox4" Text="{Binding Path=MyName}
" VerticalAlignment="Top" Width="120" />

到此這幾種模式就介紹完了。不過,我這裡還有個有趣的問題:如果資料來源沒有實現INotifyPropertyChanged介面,這幾種模式還能正常工作嗎?我做了一些嘗試,得出的結論是:

  1、OneTime模式根本不受影響;

  2、如果在後臺程式碼中更改了資料來源,目標屬性不會得到通知;

  3、如果在介面上更改目標屬性,資料來源會收到更新通知。

不實現INotifyPropertyChanged介面的資料來源到底有沒有意義,以及為什麼會出現以上的現象,我還需要深入研究。