天天看點

WP7資料綁定基本描述:具體過程:運作效果:說明:

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元素。

         •綁定的文法用大括号表示

                  &lt;TextBlock Text="{Binding Note}"/&gt;等同于&lt;TextBlock Text="{Binding path= Note}"/&gt;

         •三種資料流方向:(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,讓它顯示的比較整齊美觀

&lt;ListBox Height="595" HorizontalAlignment="Left" Margin="0,6,0,0" Name="listBox1" VerticalAlignment="Top" Width="460" &gt;  

    &lt;ListBox.ItemTemplate&gt;  

          &lt;DataTemplate&gt;  

               &lt;StackPanel Orientation="Horizontal"&gt;  

                      &lt;Image  Height="84" Source="{Binding Img}" Width="81" HorizontalAlignment="Left" VerticalAlignment="Top" /&gt;   &lt;!—通過Image的Source屬性将上面定義的資料實體Img綁定到Image上--&gt;  

                &lt;StackPanel Orientation="Vertical"&gt;  

                    &lt;TextBlock Text="{Binding EventType}" FontSize="48"  VerticalAlignment="Top" /&gt;   &lt;!—通過TextBlock的Text屬性将上面定義的資料實體EventType綁定到TextBlock上--&gt;                       

                    &lt;TextBlock Text="{Binding Note}" FontSize="24"  VerticalAlignment="Center" /&gt;     &lt;!—同上,通過TextBlock的Text屬性将上面定義的資料實體Note綁定到TextBlock上--&gt;  

                &lt;/StackPanel&gt;  

            &lt;/StackPanel&gt;        

        &lt;/DataTemplate&gt;                  

     &lt;/ListBox.ItemTemplate&gt;                   

&lt;/ListBox&gt;            

3.     背景*.xmal.cs中定義資料源:

public partial class MainPage : PhoneApplicationPage  

    {  

        // Constructor  

        public MainPage()  

        {   

            InitializeComponent();  

        }  

        private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)  

        {  

            List&lt;Item&gt; list=new List&lt;Item&gt;();//建立一個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,如需轉載請自行聯系原作者

繼續閱讀