面朝大海 春暖花开

天行健,君子以自强不息; 地势坤,君子以厚德载物; 宠辱不惊,闲看庭前花开花落; 去留无意,漫随天外云卷云舒。 不妄取,不妄予,不妄想,不妄求, 与人方便,随遇而安。 ——《周易》

导航

十二、数据绑定——listview

第一种

方法一

第一步:在XAML文件中

  <ListView x:Name="lv1" HorizontalAlignment="Left" Height="382" Margin="102,240,0,0" VerticalAlignment="Top" Width="586" RenderTransformOrigin="0.498,-1.5">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <!-- DataTemplate标签下只能有一个元素 -->
                    <StackPanel Orientation="Horizontal">
                    <TextBox Text="{Binding Name}"></TextBox>
                    <TextBlock Text="{Binding Age}"></TextBlock>
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
           
        </ListView>

第二步:在.cs文件中

 protected override void OnNavigatedTo(NavigationEventArgs e)        

{              //首次进入此页面,此时可以加载数据

           if (e.NavigationMode == NavigationMode.New)

             {

                //Person就是上一篇中定义的

                List<Person> list = new List<Person>();

                list.Add(new Person { Name = "aaaaaaaaaaaaa", Age = 23 });

                list.Add(new Person { Name = "bbbbbbbbbbb", Age = 24 });

                list.Add(new Person { Name = "ccccccccccccc", Age = 33 });

                lv1.ItemsSource = list;  //ItemsSource为界面上显示的数据源

            }

}

运行结果:

方法二

第一步:在XAML文件

 <!-- ItemsSource的值就等于DataContext的值 -->

  <ListView x:Name="lv1"  ItemsSource="{Binding}"  HorizontalAlignment="Left" Height="382" Margin="102,240,0,0" VerticalAlignment="Top" Width="586" RenderTransformOrigin="0.498,-1.5">

            <ListView.ItemTemplate>

                <DataTemplate>

                    <!-- DataTemplate标签下只能有一个元素 -->

                    <StackPanel Orientation="Horizontal">

                    <TextBox Text="{Binding Name}"></TextBox>

                    <TextBlock Text="{Binding Age}"></TextBlock>

                    </StackPanel>

                </DataTemplate>

            </ListView.ItemTemplate>

 </ListView>

第二步:在.cs文件中

 protected override void OnNavigatedTo(NavigationEventArgs e)        

{              //首次进入此页面,此时可以加载数据

           if (e.NavigationMode == NavigationMode.New)

             {

                //Person就是上一篇中定义的

                List<Person> list = new List<Person>();

                list.Add(new Person { Name = "aaaaaaaaaaaaa", Age = 23 });

                list.Add(new Person { Name = "bbbbbbbbbbb", Age = 24 });

                list.Add(new Person { Name = "ccccccccccccc", Age = 33 });

                lv1.DataContext= list; 

            }

}

第二种

第一步:在XAML文件

 

  <ListView x:Name="lv1"   HorizontalAlignment="Left" Height="382" Margin="102,240,0,0" VerticalAlignment="Top" Width="586" RenderTransformOrigin="0.498,-1.5">

            <ListView.ItemTemplate>

                <DataTemplate>

                    <TextBox Text="{Binding }"></TextBox>  //表示binding的值直接等于数据上下文中,也就是说数据源中的每一个项目对应的是listview种的item

              </DataTemplate>

            </ListView.ItemTemplate>

 </ListView>

第二步:在.cs文件中

 protected override void OnNavigatedTo(NavigationEventArgs e)        

{              //首次进入此页面,此时可以加载数据

           if (e.NavigationMode == NavigationMode.New)

             {

             lv1.ItemsSource=new string[] {"aaaaaaaaaaaa","bbbbbbbbb","ccccccccccc"};  //说明listview的每一个item就是一个string

            }

}

 

说明:0、绑定的使用步骤:封装一个对象:要实现接口INotifyPropertyChanged

                                    在相应页面中添加数据:要使用ObservableCollection<封装的对象名字>,然后用ItemsSource或DataContext进行绑定

                                   在XAML文件中绑定。

       1、listview的属性之 SelectionMode,有4个值:None 表示listview的所有item都不可以被选择;  Single 表示 同时只有一个item被选择   Multiple  表示同时可有多个item被选择。

        2、获得listview的选中项:当SelectionMode=Single时

                                            Object obj=  lv1.SelectedItem;  //lv1是listview的名字,判断obj是否为空
                                             string getName = ((Person)obj).Name;

                                            当SelectionMode=Multiple时

                                             IList<Object> obj=  lv1.SelectedItems;
                                              int length = obj.Count;
                                             for(int i=0;i<length;i++)
                                            {
                                                string getname = ((Person)obj[i]).Name;
                                                int getage = ((Person)obj[i]).Age;
                                               }

     3、IsItemClickEnabled表示是否触发ItemClick事件,ItemClick事件中e.ClickedItem可以得到点击的项:如果是手动加入的Items ,则值是点击项的Content;如果数据是绑定的,则点击项是 DataContent。

     首先设置IsItemClickEnabled=“true",启用ItemClick事件;

     监听ItemClick事件,e.ClickedItem为点击的那一项

     例如:Person  p=e.ClickedItem as Person;

      4、ListView的添加/删除和绑定类似,就是首先,将 List<Person> list = new List<Person>();改成 ObservableCollection<Person> list = new ObservableCollection<Person>();并且定义成全局变量。因为list无法监听item的改变,所以没有效果,因此应该实现一个监听类才行。然后,点击添加/删除之后,执行  list.Add(new Person { Name = "ddddddddddd", Age = 43 });   /list.Remove(对象);   /list.RemoveAt(索引值);即可。

ObservableCollection实现了接口INotifyCollection[集合]Changed(监听)和INotifyPropertyChanged,继承了类Collection〈〉。而Collection〈〉中有Add(),Remove(),RemoveAt()等方法,和List类似

  5、控件ComboBox 和FlipView数据绑定的方式和ListView一样。

posted on 2012-12-06 16:55  gentle_girl  阅读(436)  评论(0编辑  收藏  举报