WPF 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 XPath=@Name} " Header ="姓名" Width ="100" />
< GridViewColumn DisplayMemberBinding =" {Binding XPath=@Sex} " Header ="性别" Width ="50" />
< GridViewColumn DisplayMemberBinding =" {Binding XPath=@Age} " 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 >
复制代码

 

 

搞定。第二个,参考了网上的一个例子,具体网址忘记了。

codeproject有个经典的例子,http://www.codeproject.com/KB/WPF/ListViewDragDropManager.aspx

 本文demo:http://files.cnblogs.com/xiaokang088/ListViewBindingTest.rar

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPFListView是一个非常强大的控件,它可以用于呈现列表数据数据绑定WPF编程中的一个核心概念,通过数据绑定可以将数据和UI元素进行关联。下面是一个简单的例子,演示如何使用ListView进行数据绑定。 1. 创建一个数据模型类 首先我们需要定义一个数据模型类,用于表示每个列表项的数据。例如,我们可以定义一个Person类,包含Name和Age属性。 ```csharp public class Person { public string Name { get; set; } public int Age { get; set; } } ``` 2. 创建一个ViewModel类 接下来,我们需要创建一个ViewModel类,用于管理ListView数据源。例如,我们可以定义一个PeopleViewModel类,包含一个ObservableCollection<Person>类型的People属性,用于存储所有的Person对象。ObservableCollection是一个特殊的集合类,它可以自动通知UI元素数据源的变化。 ```csharp public class PeopleViewModel { public ObservableCollection<Person> People { get; set; } public PeopleViewModel() { People = new ObservableCollection<Person>(); People.Add(new Person { Name = "Tom", Age = 20 }); People.Add(new Person { Name = "Jerry", Age = 30 }); People.Add(new Person { Name = "Mickey", Age = 25 }); } } ``` 3. 在XAML中创建ListView控件 在XAML中创建ListView控件,并通过ItemsSource属性将其与ViewModel的People属性进行绑定。可以使用DataTemplate定义每个列表项的UI元素。 ```xml <ListView ItemsSource="{Binding People}"> <ListView.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock Text="{Binding Name}" /> <TextBlock Text="{Binding Age}" /> </StackPanel> </DataTemplate> </ListView.ItemTemplate> </ListView> ``` 4. 在窗口代码中设置DataContext 最后,在窗口代码中设置DataContext为PeopleViewModel的实例。 ```csharp public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new PeopleViewModel(); } } ``` 这样,当窗口加载时,ListView就会自动显示ViewModel的People属性中的所有数据。当数据发生变化时,ListView也会自动更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值