C# WPF ListView控件的实例详解
作者:lqh 发布时间:2022-08-05 17:54:23
C# WPF ListView控件的实例详解
C#的WPF作为现在微软主流的桌面程序开发平台,相比过去的MFC时代,有了非常多的不同。本人刚从MFC平台转过来,以为可以轻松上手,哪知碰到了很多问题,十分不解。不得不乖乖回去看了本书,再继续回到边左边边学的路上。在这边也推荐《深入浅出WPF》这本书,拿来上手还是极好的。
由于WPF以数据驱动UI的设计理念,很多控件用起来都与之前平台的相差很多,ListView控件算是有代表性的,这是进化的成果。关于该控件的应该,很多参考了这篇博文,如觉本人记述不清楚,可去查阅。
WPF的代码分为前端和后端两部分,前端为UI,负责与用户进行交互;而后端则负责算法和数据的执行。由于这种机制,我们程序员对两端都需要有一个大概的了解,且主要注重于后端,这点相比以前混起来的机制实在是好太多。
ListView控件的XAML代码大致如下书写:
<ListView x:Name="listView" Height="165" VerticalAlignment="Top" HorizontalAlignment="Left" Width="604" BorderThickness="0,0,0,1" BorderBrush="#FFC8CCD4">
<ListView.View>
<!--设置列标签并将列成员与一个变量名称相绑定,以便后台链接修改-->
<GridView>
<GridViewColumn Header="姓名" Width="100" DisplayMemberBinding="{Binding Path=Name}"/>
<GridViewColumn Header="工作年限" Width="100" DisplayMemberBinding="{Binding Path=WorkYears}"/>
<GridViewColumn Header="工作电话" Width="100" DisplayMemberBinding="{Binding Path=WorkPhoneNumber}"/>
<GridViewColumn Header="邮箱" Width="100" DisplayMemberBinding="{Binding Path=Email}"/>
</GridView>
</ListView.View>
</ListView>
代码中我们设置了一个四列,列项分别为“姓名”、“工作年限”、“工作电话”和“邮箱”的列表,并将各项的成员分别与一个变量名称相绑定。单单写这些代码就已经可以看到界面上有一个对应的列表出现,且可以编译运行。前端的工作也大致结束(定义出控件大致外观和给出绑定接口),具体数据内容,可交给后端来绑定。
接下来我们来写后端的c#代码:
先定义一个类,这个类中的变量将与上面列表项绑定的变量一一对应,这样我们实例化一个对象便将对应于列表的一行。
class personalInfo//个人信息类
{
private string _name;
private int _workYears;
private string _workPhoneNumber;
private string _email;
public string Email//get和set分别为只读和只写,这是绑定的正常写法,Email为我们要进行绑定的一个属性
{
get { return _email; }
set { _email = value; }
}
public string WorkPhoneNumber
{
get { return _workPhoneNumber; }
set { _workPhoneNumber = value; }
}
public int WorkYears
{
get { return _workYears; }
set { _workYears = value; }
}
public string Name
{
get { return _name; }
set { _name = value; }
}
public personalInfo(string name, int workYears, string workPhoneNumber, string email)//构造函数
{
_name = name;
_workYears = workYears;
_workPhoneNumber = workPhoneNumber;
_email = email;
}
}
定义了上面的类之后,我们在代码中使用System.Collections.ObjectModel这个命名空间,然后使用“ObervableCollection”即“动态数据集合类”来管理我们的类对象。
ObservableCollection<personalInfo> personalInfoList = new ObservableCollection<personalInfo>();
之后,给数据集合添加类成员
personalInfoList.Add(new personalInfo("李白", 10, "134124", "libai@hotmail.com"));
personalInfoList.Add(new personalInfo("杜甫", 2, "242354", "dufu@hotmail.com"));
personalInfoList.Add(new personalInfo("苏轼", 4, "345356", "sushi@hotmail.com"));
personalInfoList.Add(new personalInfo("李清照", 3, "453546", "liqingzhao@hotmail.com"));
最后,把数据和UI绑定在一起便大功告成了
listView.ItemsSource = personalInfoList;
上面的代码编译之后便能看到列表框和里面的数据,由于“ObervableCollection”在数据添加和删除的时候后发送消息给UI,所以我们在添加和删除一项数据的时候UI会做相应的修改。然而如果修改类里面的内容的时候则不行,因为修改的时候没有发送消息通知UI,所以我们还需要给“personalInfo”类定义消息通知接口,让其数据发生改变的时候也给UI发送消息。该类修改如下(需要添加System.ComponentModel命名空间):
class personalInfo: INotifyPropertyChanged //个人信息类
{
private string _name;
private int _workYears;
private string _workPhoneNumber;
private string _email;
public event PropertyChangedEventHandler PropertyChanged;
public string Email//get和set为只读和只写,体现C#l
{
get { return _email; }
set
{
_email = value;
PropertyChanged(this, new PropertyChangedEventArgs("Email"));
}
}
public string WorkPhoneNumber
{
get { return _workPhoneNumber; }
set
{
_workPhoneNumber = value;
PropertyChanged(this, new PropertyChangedEventArgs("WorkPhoneNumber"));
}
}
public int WorkYears
{
get { return _workYears; }
set
{
_workYears = value;
PropertyChanged(this, new PropertyChangedEventArgs("WorkYears"));
}
}
public string Name
{
get { return _name; }
set
{
_name = value;
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
public personalInfo(string name, int workYears, string workPhoneNumber, string email)//构造函数
{
_name = name;
_workYears = workYears;
_workPhoneNumber = workPhoneNumber;
_email = email;
}
}
这样,我们便实现了ListView控件的基本绑定、修改和显示功能了。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://blog.csdn.net/weixinhum/article/details/49340313


猜你喜欢
- Android系统提供了MediaScanner,MediaProvider,MediaStore等接口,并且提供了一套数据库表格,通过Co
- 1 运算符1.1 概述运算符 用于连接 表达式 的 操作数,并对操作数执行运算。例如,表达式num1+num2,其操作数是num1和num2
- Oracle 数据库,查询增加RowBounds限制查询条数,默认是0到1000条private final static int rowL
- 直接上代码public static class ImageCompress { /// <su
- 前言当初年少懵懂,那年夏天填志愿选专业,父母听其他长辈说选择计算机专业好。从那以后,我的身上就有了计院深深的烙印。从寝室到机房,从机房到图书
- 使用adb or fastboot命令进入高通的9008(edl)模式已经有人写过了,下面两种是其中之一,我再加一个如题,两种方法1. ad
- 本文实例为大家分享了Android联系人字母排序的具体代码,供大家参考,具体内容如下实现思路:首先说下布局,整个是一个相对布局,最下面是一个
- 有个小伙伴遇到了这样一个问题,就是AutoCompleteTextView实现自动填充的功能。同时要具备手机格式化的功能。下拉列表最后一行是
- 需求:视频通话界面,两个surfaceView一个显示本端的视图,另一个显示对端的视图,由于显示比例的问题总会存在一个覆盖另一个的问题,为保
- 本文实例讲述了C#画笔Pen绘制自定义线的帽子。分享给大家供大家参考。具体如下:using System;using System.Coll
- 学习目的:1、掌握在Android中如何建立EditText2、掌握EditText的常用属性3、掌握EditText焦点的事件、按键的事件
- 前言:项目中我们经常会遇到有时候需要等待其他线程完成任务后,主线程才能执行其他任务,那么我们将如何实现呢?Join 解决方案join 的工作
- 一.介绍门面模式(Facade Pattern)属于结构型模式。门面模式又叫作外观模式,通过给多个复杂的子系统提供一个门面(高层接口),使这
- Ctrl+1 快速修复Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当
- 本文实例讲述了Android开发中MotionEvent坐标获取方法。分享给大家供大家参考,具体如下:Android MotionEvent
- 对于使用avalonia的时候某些功能需要到一些提示,比如异常或者成功都需要对用户进行提示,所以需要单独实现弹窗功能,并且可以自定义内部组件
- 一、cancel()无效当协程任务被取消的时候,它的内部是会产生一个 CancellationException 的。而协程的结构化并发,最
- 本文是利用C# 实现FTP客户端的小例子,主要实现上传,下载,删除等功能,以供学习分享使用。思路:通过读取FTP站点的目录信息,列出对应的文
- 1.类加载<1>.父子类执行的顺序1.父类的静态变量和静态代码块(书写顺序)2.子类的静态变量和静态代码块(书写顺序)3.父类的
- 什么是反射机制反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作。例如它允许一个ja