WPF 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>

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值