Windows Phone 實用開發技巧(29):動態綁定Pivot

來源:互聯網
上載者:User

前幾天有個網友問我如何動態綁定Pivot項,即PiovtItem的項是動態,PivotItem中的資料也是動態。這個使用MVVM模式可以很方便的實現,在ViewModel中設定一個集合表示當前有多少個Item,集合中的類中含有當前PivotItem中的資料來源。下面以一個簡單的demo來示範下:

先來看看XAML中是怎麼去綁定的

<!--LayoutRoot is the root grid where all page content is placed--><Grid x:Name="LayoutRoot" Background="Transparent">    <!--Pivot Control-->    <controls:Pivot Title="MY APPLICATION"                     ItemTemplate="{StaticResource DT_Pivot}"                     HeaderTemplate="{StaticResource DT_Header}"                    ItemsSource="{Binding BindData}">    </controls:Pivot></Grid>

Pivot的資料來源綁定是ViewModel中的BindData,ItemTemplate表示PivotItem的模板,HeaderTemplate表示PivotItem中Header模板,這兩個模板分別如下:

<phone:PhoneApplicationPage.Resources>    <DataTemplate x:Key="DT_Pivot">        <ListBox ItemsSource="{Binding ListData}">            <ListBox.ItemTemplate>                <DataTemplate>                    <TextBlock Text="{Binding}" />                </DataTemplate>            </ListBox.ItemTemplate>        </ListBox>    </DataTemplate>    <DataTemplate x:Key="DT_Header">        <TextBlock Text="{Binding Name}" />    </DataTemplate></phone:PhoneApplicationPage.Resources>

HeaderTemplate十分簡單,就使用一個TextBlock表示當前的標題。Pivot的ItemTemplate裡面放置一個ListBox,資料來源為BindData下的ListData

ViewModel中的資料來源:

private ObservableCollection<TestPivot> _bindData;public ObservableCollection<TestPivot> BindData{    get    {        return _bindData;    }    set    {        _bindData = value;        RaisePropertyChanged("BindData");    }}

TestPivot即自己定義的類,含有PiovtHeader和PivotItem資料來源的類:

public class TestPivot{    /// <summary>    /// property for pivot header    /// </summary>    public string Name { get; set; }    /// <summary>    /// data for pivot item datasource(eg.listbox)    /// </summary>    public List<string> ListData { get; set; }}

ok,綁定已經建立好了,現在就是如何初始化資料來源了,為了簡單起見,以最簡單的迴圈產生繫結來源資料:

public void AddData(int size){    BindData = new ObservableCollection<TestPivot>();    for (int i = 0; i < size; i++)    {        TestPivot t = new TestPivot();        t.Name = "piovt item" + i;        t.ListData = new List<string>();        for (int j = 0; j < 10; j++)        {            t.ListData.Add("List item"+j);        }        BindData.Add(t);    }}

其中size表示當前有幾個PivotItem,這裡Pivot資料來源可以是同步方式也可以以非同步方式,只要TestPivot實現NotifyPropertyChanged,並且屬性ListData通知改變即可。

你可以從這裡找到原始碼, Hope that helps.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.