十二、数据绑定——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) 编辑 收藏 举报