WP7資料綁定
基于silverlight的windows phone資料綁定,它提供了一種資料顯示并與資料進行互動的簡便方法,UI元素和資料對象之間的綁定使得資料可以在兩者之間進行流動,綁定建立之後,如果資料出現更改,則綁定到該資料的UI元素會自動反映更改,同樣,使用者在UI元素中所做的更改也可以在資料對象中反映出來,它的基本過程如圖:
<a href="http://blog.51cto.com/attachment/201110/173716962.jpg" target="_blank"></a>
•綁定目标是UI控件,控件必須是FrameworkElement的任何一個DependencyProperty(提供快速的方法計算值,可與其他動态資料互動)。
•綁定來源是将要與綁定目标進行資料互動的資料。來源可以是任何運作于CLR的對象,包括目标元素本身或者其他UI元素。
•綁定的文法用大括号表示
<TextBlock Text="{Binding Note}"/>等同于<TextBlock Text="{Binding path= Note}"/>
•三種資料流方向:(Mode屬性):
OneTime:一次綁定,在綁定建立時使用源資料更新目标,适用于隻顯示資料而不進行資料的更新。
OneWay:單向綁定,在綁定建立時或者源資料發生變化時更新到目标,适用于顯示變化的資料。
TwoWay:雙向綁定,在任何時候都可以同時更新源資料和目标。
其中預設的是OneWay,即背景資料發生變化,前台建立了綁定關系的相關控件也會進行更新
下面我們就針對于LIstBox控件來說明一下綁定的具體實作過程,參考代碼如下:
1. 定義資料實體:
可以直接定義一個字元串數組,可以建立一個實體類,建立一個該類的對象數組,也可以将實體直接寫到App的Resource中,這個可以根據實際需要,對于比較大的項目建議采用後面兩種方法,這樣便于以後對項目進行維護,這裡面寫的是一個簡單的實體類
public class Item
{
public ImageSource Img { set; get;}
public string EventType { set; get;}
public string Note { set; get; }
}
2. 在*.xmal中利用Binding對象設定資料綁定
我們還可以給ListBox指定清單項的模闆ItemTemplate,讓它顯示的比較整齊美觀
<ListBox Height="595" HorizontalAlignment="Left" Margin="0,6,0,0" Name="listBox1" VerticalAlignment="Top" Width="460" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Height="84" Source="{Binding Img}" Width="81" HorizontalAlignment="Left" VerticalAlignment="Top" /> <!—通過Image的Source屬性将上面定義的資料實體Img綁定到Image上-->
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding EventType}" FontSize="48" VerticalAlignment="Top" /> <!—通過TextBlock的Text屬性将上面定義的資料實體EventType綁定到TextBlock上-->
<TextBlock Text="{Binding Note}" FontSize="24" VerticalAlignment="Center" /> <!—同上,通過TextBlock的Text屬性将上面定義的資料實體Note綁定到TextBlock上-->
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
3. 背景*.xmal.cs中定義資料源:
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
}
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
List<Item> list=new List<Item>();//建立一個Item的對象集合
Item item=new Item();
item.Img = new BitmapImage(new Uri("ic_sleep.png", UriKind.Relative));
item.EventType = "sleep";
item.Note = "9:00~10:30";
list.Add(item);
item = new Item();
item.Img = new BitmapImage(new Uri("ic_breastfed.png", UriKind.Relative));
item.EventType = "breastfed";
item.Note="10:40~10:55";
item=new Item();
item.Img = new BitmapImage(new Uri("ic_diaper.png", UriKind.Relative));
item.EventType = "Diaper";
item.Note = "Haha";
list.Add(item);
item = new Item();
item.Img = new BitmapImage(new Uri("ic_growth.png", UriKind.Relative));
item.EventType = "Growth";
item.Note = "Happy";
list.Add(item);
listBox1.ItemsSource = list; //将list集合中的資料對象添加到ListBox控件的對應的清單項中
}
<a href="http://blog.51cto.com/attachment/201110/173443470.png" target="_blank"></a>
Windows Phone開發中大部分控件都可以實作資料綁定,在使用Binding對象将資料源與UI控件進行資料綁定之前,建議大家在大緻了解綁定過程的基礎上,首先熟悉一下各個控件的相關屬性及使用方法,這樣可能會使代碼更加簡潔,同時也應該掌握一下頁面布局的設計,使資料顯示的效果更加Nice。大家可以自己先寫一個簡單的小例子來實作資料綁定,了解綁定的大緻過程之後,然後逐漸向周圍的其他控件進行擴充。目前我自己也是一個WP7的初學者,學習過程中在這裡隻是小小總結一下,希望不對的地方大家多多給予指正~~
本文轉自HDDevTeam 51CTO部落格,原文連結:http://blog.51cto.com/hddev/695154,如需轉載請自行聯系原作者