zoukankan      html  css  js  c++  java
  • 十二、数据绑定——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一样。

  • 相关阅读:
    如何设置项目encoding为utf-8
    如何使用Navicat恢复数据库脚本
    如何使用Navicat备份数据库脚本
    表单编辑组件使用指南
    Maven如何打包本地依赖包
    怎么替换jar包里面的文件?
    如何开始创建第一个基于Spring MVC的Controller
    怎么将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL
    如何使用Eclipse调试framework
    windows下安装oracle,sqlplus连接启动oracle(oracle 主机字符串输入是什么)
  • 原文地址:https://www.cnblogs.com/suinuaner/p/twelve.html
Copyright © 2011-2022 走看看