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;
上一篇: 谁是老板
下一篇: DSAPI 导出EXEDLL函数到字符串