ListView 控件和 INotifyPropertyChanged 接口
原文:ListView 控件和 INotifyPropertyChanged 接口
ListView 控件和 DataGridView 控件
ListView 是跟 Winform 中 DataGridView 用法以及显示效果差不多的一个 WPF 控件,可以通过列表的方式方便的显示数据;

<!-- ListView 控件 Xaml 代码 -->
<ListView Name="listView" Margin="10,10,9.6,10">
<ListView.View>
<GridView>
<GridViewColumn Header="任务"/>
<GridViewColumn Header="任务描述"/>
<GridViewColumn Header="循环周期(秒)"/>
<GridViewColumn Header="任务状态/>
</GridView>
</ListView.View>
</ListView>
DataGridView 控件的使用中,通常我们都会创建一个类用来储存数据,读取数据之后再创建一个这个类的集合,然后将集合赋给 dataGridView1.DataSource 属性;也可不用集合,直接在循环中把数据一条一条的加载 dateGridView1.Rows.Add();
// 先创建一个用来储存数据的类
class UserInfo
{
public string Name { get; set; }
public int Age { get; set; }
}
// WinForm:DataGridView 控件
// 方法一:创建一个对象集合,赋值给 DataSource 属性
List<UserInfo> infos = new List<UserInfo>();
for(int i = 0; i > 10; i++)
{
infos.Add(new UserInfo
{
Name = $"Light_{i}",
Age = i
});
}
dataGridView1.DataSource = infos;
// 方法二:一条一条的添加数据
for(int i = 0; i > 10; i++)
{
dateGridView1.Rows.Add(new UserInfo
{
Name = $"Light_{i}",
Age = i
});
}
在 ListView 控件中 DataSource 属性在这里是 listView.ItemsSource;单条数据加载的方法是 listView.Items.Add();,整体用法还是大同小异;
// WPF:ListView 控件
// 方法一:创建一个对象集合,赋值给 ItemsSource 属性
List<UserInfo> infos = new List<UserInfo>();
for(int i = 0; i > 10; i++)
{
infos.Add(new UserInfo
{
Name = $"Light_{i}",
Age = i
});
}
listView.ItemsSource = infos;
// 方法二:一条一条的添加数据
for(int i = 0; i > 10; i++)
{
listView.Items.Add(new UserInfo
{
Name = $"Light_{i}",
Age = i
});
}
INotifyPropertyChanged 接口
命名空间:System.ComponentModel
INotifyPropertyChanged 是一个非常强大的接口,用于向对象绑定的客户端控件发出对象属性已更改的通知;
用人话说就是:正常我们向上面一样,把对象绑定到控件用来显示数据,有一个缺点:每次更改对象的属性之后,我们需要手动的重新再去绑定数据,否则数据是不会刷新显示修改后的值的;
但是如果对象实现了 INotifyPropertyChanged 接口的话,我们根本不用担心这些问题,直接修改已绑定对象的属性,客户端就会自动刷新显示数据;
比如说,上面我们创建的 UserInfo 类就可以修改成这样:
class UserInfo : System.ComponentModel.INotifyPropertyChanged
{
private string name;
private int age;
// 属性发生更改时触发的事件,由每个属性的 Set 访问器调用
public event PropertyChangedEventHandler PropertyChanged;
public string Name
{
get => name;
set
{
name = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Name"));
}
}
public string Age
{
get => age;
set
{
age = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Age"));
}
}
}
这样创建完成后,我们再安装上面的方法将对象绑定客户端控件,之后每次修改数据,就可以直接获取绑定的对象然后修改对象属性就可以了,无需再做任何操作;
// DataGridView 控件
// 获取选中行,返回当前绑定对象
UserInfo info = (UserInfo)dataGridView1.SelectedRows[0].DataBoundItem;
info.Name = "Liang";
info.Age = 18;
// ListView 控件
// 获取选中行,返回当前绑定对象
UserInfo info = (UserInfo)listView.SelectedItem;
info.Name = "Liang";
info.Age = 18;
ListView 控件和 INotifyPropertyChanged 接口的更多相关文章
- C# ListView 控件和 INotifyPropertyChanged 接口
ListView 控件和 DataGridView 控件 ListView 是跟 Winform 中 DataGridView 用法以及显示效果差不多的一个 WPF 控件,可以通过列表的方式方便的显示 ...
- ListView控件--2016年12月9日
ListView属性 ListView 名称 说明 AccessKey 重写 WebControl.AccessKey 属性. 不支持将此属性设置 ListView 控件.(覆盖 WebContr ...
- 《ASP.NET1200例》ListView 控件与DataPager控件的结合<一>
分页 在前一部分开始时介绍的原 HTML 设计中内含分页和排序,所以根据规范完整实现该网格的任务尚未完成.我们先分页,然后再排序. ListView 控件中的分页通过引入另一个新控件 Data ...
- 【Android基础】listview控件的使用(3)------Map与SimpleAdapter组成的多显示条目的Listview
前面介绍的两种listview的使用都是最基础的,所以有很大的局限性,比如只能在一个item(即每一行的条目)中显示一个文本信息,这一篇我将介绍Map与SimpleAdapter组成的多显示条目的Li ...
- 【Android基础】listview控件的使用(2)-------继承自ListActivity的普通listview
由于listview在android控件中的重要性,所以android为我们直接封装了一个类ListviewActivity,直接将listview封装在了activity之中,在本篇中,我将介绍在L ...
- 【Android基础】listview控件的使用(1)------最简单的listview的使用
listview控件是项目开发中最常用的空间之一,我将慢慢推出关于listview的一系列的文章,先从最简单的,系统自带的listview开始吧! 先上效果图: activity_one.xml &l ...
- C#:ListView控件如何实现点击列表头进行排序?
using System; using System.Collections; using System.Windows.Forms; namespace Common { /// <summa ...
- ListView控件
打气筒工具:将R.layout.item_listview布局添加到相应的view控件里面 View view=LayoutInflater.from(ScondPro.this).inflate ...
- Android中ListView控件的使用
Android中ListView控件的使用 ListView展示数据的原理 在Android中,其实ListView就相当于web中的jsp,Adapter是适配器,它就相当于web中的Servlet ...
随机推荐
- python常用模块json
python jons模块 json模块 主要是解决数据格式的转换问题,比如python接收到json对象需要转换为python对象,供python处理,亦或者python数据需要发送到其给其他客户端 ...
- SQL Server ltrim(rtrim()) 去不掉空格
原因:中间存在回车符或者换行符,所以要先将此符号替换掉: LTRIM(RTRIM(REPLACE(REPLACE( A,char(13),''),char(10),'') )) LTRIM(A) -- ...
- 手把手教你搭建WEB服务器和FTP服务器
注:本次教程的环境是在“Windows 10 PC中远程控制的Windows Server 2012 R2服务器”,你可以自己在自己电脑中安装虚拟机再安装Windows Server 2012 R2服 ...
- 禁用selinux
查看selinux状态: [root@VM000000518 upload]# getenforce Enforcing 禁用: [root@VM000000518 upload]# setenfor ...
- tkinter学习系列(三)之Label控件
目录 目录 前言 (一)基本用法和可选属性 ==1.基本用法== ==2.可选属性== (二)属性的具体使用 ==1.常用属性== ==2.边距与文本对齐方式== ==案例一== ==案例一的效果== ...
- eclipse+tomcat测试连接时候HTTP Status 404错误
想要在eclipse里部署tomcat,结果tomcat单独可以通过连接测试,用eclipse就404了 404肯定都是目录不对,试了半天在eclipse下改了一下配置和文件位置就行了 1.先在菜单栏 ...
- QT 12 QTimage转换Mat
QImage cvMat2QImage(const cv::Mat& mat) { // 8-bits unsigned, NO. OF CHANNELS = 1 if(mat.type() ...
- 转载 SpringMVC详解(二)------详细架构
目录 1.SpringMVC 详细介绍 2.SpringMVC 处理请求流程 3.配置前端控制器 4.配置处理器适配器 5.编写 Handler 5.配置处理器映射器 6.配置视图解析器 7.Disp ...
- 椭圆曲线签名算法的v的定义
在之前的个个与签名相关的地方我都对v的定义感到十分困惑,知道查看了黄皮书以后才对它的作用有了一定地了解,如下: (v is the recovery id: a 1 byte value specif ...
- Centos 6.5配置rsync+inotify实现文件实时同步
1.安装rsync(两台机器执行相同的步骤)yum install gcc yum install rsyncd xinetd -y因为rsync是由xinetd启动的,所以需要修改一个配置vim / ...