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;
}
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 >
< 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 >
< 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 >
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;
}
}
{
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 >
< 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 >
< 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