ListView 的三种数据绑定方式

ListView 的三种数据绑定方式

1.最原始的绑定方式:

public ObservableCollection<object> ObservableObj;
public MainWindow()
{
InitializeComponent();
ObservableObj = new ObservableCollection<object>();
ObservableObj.Add(new { Name = "帅波", Sex = "男", Age = 20 });
ObservableObj.Add(new { Name = "帅波2", Sex = "女", Age = 60 });
ObservableObj.Add(new { Name = "帅波3", Sex = "女", Age = 50 });
ObservableObj.Add(new { Name = "帅波4", Sex = "女", Age = 40 });
ObservableObj.Add(new { Name = "帅波5", Sex = "男", Age = 20 });
lv.DataContext = ObservableObj;
}

当然了,用list<object> 也可以,只不过数据源变化后,要调用lv.Items.Refresh();

前台如下:

<ListView Height="122" HorizontalAlignment="Left" ItemsSource="{Binding}" Margin="33,67,0,0" Name="lv" VerticalAlignment="Top" Width="400" >
<ListView.View>
<GridView >
<GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Width="50" Header="姓名" />
<GridViewColumn DisplayMemberBinding="{Binding Path=Sex}" Width="50" Header="性别" />
<GridViewColumn DisplayMemberBinding="{Binding Path=Age}" Width="50" Header="年龄" >
<GridViewColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Foreground="Red"/>
</DataTemplate>
</GridViewColumn.HeaderTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>

2.用xml绑定

<XmlDataProvider x:Key="xmlData" XPath="/Root">
<x:XData>
<Root xmlns="">
<Item Name="刷波波10" Sex="女" Age="11"/>
<Item Name="刷波波11" Sex="男" Age="11"/>
<Item Name="刷波波12" Sex="女" Age="11"/>
<Item Name="刷波波13" Sex="女" Age="11"/>
<Item Name="刷波波14" Sex="男" Age="11"/>
</Root>
</x:XData>
</XmlDataProvider>

<CollectionViewSource x:Key="viewSource" Source="{Binding Source={StaticResource xmlData},XPath=Item}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="@Sex" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>

listView的每一列绑定,需要加上@符号,Psath也换成XPath

<ListView Height="122" HorizontalAlignment="Left" ItemsSource="{Binding Source={StaticResource viewSource}}"
Margin="475,67,0,0" Name="lv2" VerticalAlignment="Top" Width="400">
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander BorderBrush="Silver" BorderThickness="1">
<Expander.Header>
<DockPanel>
<TextBlock Text="{Binding Path=Name}" Width="100"/>
<TextBlock Text="{Binding Path=ItemCount}" />
</DockPanel>
</Expander.Header>
<Expander.Content>
<ItemsPresenter />
</Expander.Content>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ListView.GroupStyle>
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding [email protected]}" Header="姓名" Width="100" />
<GridViewColumn DisplayMemberBinding="{Binding [email protected]}" Header="性别" Width="50" />
<GridViewColumn DisplayMemberBinding="{Binding [email protected]}" Header="年龄" Width="50">
<GridViewColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Foreground="Red" Text="{Binding}" />
</DataTemplate>
</GridViewColumn.HeaderTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>

3.采用ObjectDataProvider绑定

cs代码如下:

public class DataProvider
{
public ObservableCollection<object> GetData(int limit)
{
ObservableCollection<object> ObservableObj = new ObservableCollection<object>();
int i = 0;
while (i <= limit)
{
ObservableObj.Add(new { Name = "帅波" + i.ToString(), Sex = "女", Age = 50 + i });
i++;
}

return ObservableObj;
}
}

XAML的代码比较简单

<ObjectDataProvider x:Key="objData" MethodName="GetData" ObjectType="{x:Type local:DataProvider}">
<ObjectDataProvider.MethodParameters>
<sys:Int32>4</sys:Int32>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>

最后listView的绑定如下:

<ListView Height="122" HorizontalAlignment="Left" ItemsSource="{Binding Source={StaticResource objData}}" Margin="33,231,0,0" Name="lv3" VerticalAlignment="Top" Width="400">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Header="姓名" Width="50" />
<GridViewColumn DisplayMemberBinding="{Binding Path=Sex}" Header="性别" Width="50" />
<GridViewColumn DisplayMemberBinding="{Binding Path=Age}" Header="年龄" Width="50">
<GridViewColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Foreground="Red" Text="{Binding}" />
</DataTemplate>
</GridViewColumn.HeaderTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>

时间: 2024-11-09 12:33:19

ListView 的三种数据绑定方式的相关文章

vue.js三种安装方式

Vue.js(读音 /vju?/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手,还便于与第三方库或既有项目整合. 下面介绍三种 Vue.js 的安装方法: 独立版本 我们可以在Vue.js的官网上直接下载vue.js,并在html中通过<script>标签中引用.<script src = ../vue.js> </script> 开发环境不要使用最

CSS的三种定位方式介绍(转载)

在CSS中一共有N种定位方式,其中,static ,relative,absolute三种方式是最基本最常用的三种定位方式.他们的基 本介绍如下. static默认定位方式relative相对定位,相对于原来的位置,但是原来的位置仍然保留absolute定位,相对于最近的非标准刘定位,原来的位置消失,被后边的位置所顶替 下面先演示相对定位的案例 [html] view plain copyprint? <!DOCTYPE html> <html> <head> <

MyEclipse中web服务器的三种配置方式

初学Javaweb开发的人们都会遇到一个问题,就是服务器环境的搭建配置问题.下面介绍三种服务器的搭建方式. 直接修改server.xml文件 当你写了一个web应用程序(jsp/servlet),想通过浏览器直接去访问这个页面,需要在Tomcat中配置相关路径: 找到Tomcat下conf目录,你会看到有个server.xml,即服务器配置文件.用文本编译器打开,拉到Host标签,在它结束前加上我们的应用程序路径: <Context path="/HelloWeb" docBas

1、打印二进制机器码,程序内存分析,大端序小端序,指针数组,数组指针,数组的三种访问方式,typedef,#if-0-#endif,求数组大小,括号表达式

 1.打印二进制机器码(分别表示32位的和64位的) #include <stdio.h> /*按照8位的长度打印一个数值*/ void dis8bit(char val) { int bit = 8; while(bit--) { if(1<<bit&val){ printf("1"); } else { printf("0"); } if(!(bit%4)) printf(" "); } putchar(1

SQL Server 中的三种分页方式

USE tempdb GO SET NOCOUNT ON --创建表结构 IF OBJECT_ID(N'ClassB', N'U') IS NOT NULL DROP TABLE ClassB GO CREATE TABLE ClassB(ID INT PRIMARY KEY, Name VARCHAR(16), CreateDate DATETIME, AID INT, Status INT) CREATE INDEX IDX_CreateDate ON ClassB(CreateDate)

支付宝5月4日起将停止收款主页业务 保留三种收款方式

4月28日消息,支付宝近日发布公告称,将于5月4日起停止收款主页业务(产品功能将无法使用),但并未公布停止业务的具体信息. 据了解,收款主页业务是用户可以自己制作一个支付宝账号的链接,把这个链接发给付款人后,对方就可以输入金额给该用户付款. 支付宝收款主页截图 支付宝公告称,收款主页业务停止之后,用户可以有三种方式进行收款:生成专属支付宝收款账户码,将账户二维码图片分享出去:在电脑上使用我要收款:在手机上,使用支付宝钱包的我要收款. 以下为公告原文: 鉴于收款主页(https://me.alip

Hibernate的Api以及三种查询方式

Hibernate  Api |-- Configuration       配置管理类对象 config.configure();    加载主配置文件的方法(hibernate.cfg.xml) 默认加载src/hibernate.cfg.xml config.configure("cn/config/hibernate.cfg.xml");   加载指定路径下指定名称的主配置文件 config.buildSessionFactory();   创建session的工厂对象 |--

使用JavaScript判断图片是否加载完成的三种实现方式

有时需要获取图片的尺寸,这需要在图片加载完成以后才可以.有三种方式实现,下面一一介绍. 一.load事件 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>img - load event</title> </head> <body> <img id="img1" src="http:/

数组的三种定义方式

// 数组的三种定义方式 var arr = ['zhangsan','lisi','wangwu']; var arr1 = new Array('zhangsan','lisi','wangwu'); var arr2 = new Array(3); arr2[0] = 'zhangsan'; //注意:下标一定要写,不像在php中,下标是可以不写,是一直追加 // console.log(arr2); // 说明:js中,没有关联数组一说,数组下标都是数字 // 如果一个数组的下标是自定义