C# INotifyPropertyChanged用法,监听属性值发生改变
来源:互联网 发布:软件如何创建快捷方式 编辑:程序博客网 时间:2024/06/09 14:51
有时候,我们需要监听属性值的变化,当属性值发生改变时,需要被通知,没有改变时不需要通知,这个时候可以用INotifyPropertyChanged来做,也可以自定义委托事件,也可以实现,方法多多,在这里只介绍INotifyPropertyChanged的方法,目的是当属性值发生变化时,才出发事件
案例: 创建一个父类Person,继承INotifyPropertyChanged类,然后让Man类去继承
Person类:
using System;using System.Collections.Generic;using System.Text;using System.ComponentModel;namespace Demo{ public delegate void ChangedHandler(object sender, object v); public class Person : INotifyPropertyChanged { #region INotifyPropertyChanged 成员 public event PropertyChangedEventHandler PropertyChanged; public virtual void OnPropertyChanged(string propertyName) { PropertyChangedEventHandler hander = PropertyChanged; if (hander != null) hander(this, new PropertyChangedEventArgs(propertyName)); } #endregion /// <summary> /// 属性变换事件 /// </summary> /// <param name="sender">源</param> /// <param name="v">变化后的值</param> /// <param name="old">变化前的值</param> /// <param name="hander"></param> protected virtual void OnChanged(object sender, object v, object old, ChangedHandler hander) { if (!v.Equals(old) && hander != null) hander(sender, v); } }}
Man类
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Demo{ public class Man:Person { public event ChangedHandler ChangeName; public event ChangedHandler ChangeAge; string name = string.Empty; public virtual string Name { get { return name; } set { base.OnChanged(this, value, Name, ChangeName); name = value; OnPropertyChanged("Name"); } } int age = 10; public virtual int Age { get { return age; } set { base.OnChanged(this, value, Age, ChangeAge); age = value; OnPropertyChanged("Age"); } } }}
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System;using System.Collections.Generic;using System.Text;using System.ComponentModel;namespace Demo{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } Man m = new Man(); private void Form1_Load(object sender, EventArgs e) { m = new Man(); m.ChangeName += new ChangedHandler(m_ChangeName); m.ChangeAge += new ChangedHandler(m_ChangeAge); } void m_ChangeAge(object sender, object v) { SetText("m.Age " + v.ToString()); } void m_ChangeName(object sender, object v) { SetText("m.Name " + v.ToString()); } private void btnName_Click(object sender, System.EventArgs e) { m.Name = textBox2.Text; } public void SetText(string txt) { textBox1.Text += txt+ "\r\n"; } private void btnAge_Click(object sender, System.EventArgs e) { m.Age = int.Parse(textBox3.Text); } }}
0 0
- C# INotifyPropertyChanged用法,监听属性值发生改变
- 解决使用属性动画没有效果,监听发现属性值未发生改变问题
- INotifyPropertyChanged用法
- KVO-对象属性值改变监听
- 监听属性的改变
- Vue2 监听属性改变watch
- wpf INotifyPropertyChanged的用法
- WFP 之 INotifyPropertyChanged 用法
- KVC 监听某对象属性值的改变
- swift中KVO简单使用,监听属性值改变
- jQuery监听下拉框选中内容发生改变
- Vue监听当数据发生改变v-for渲染完成
- 监听页面元素宽高发生改变 resize
- Swift——监听属性的改变
- input等表单项值或属性发生变化时的事件监听
- C#数据绑定之INotifyPropertyChanged
- C#2005 如何dataGridView的单元格的值发生了改变
- UIViewController的parentViewController属性在iOS5下发生了改变
- 责任链模式
- ReSharper 配置及用法
- 数组指针和指针数组
- 【Android】RecyclerView的分割线ItemDecoration
- cassandra 报错 unable to create new native thread
- C# INotifyPropertyChanged用法,监听属性值发生改变
- 图片嵌入html
- 同步异步阻塞非阻塞 的学习
- 数据库安全之TDE列加密
- Android APP的静默安装
- Java高并发,如何解决,什么方式解决
- HTML5学习笔记—小圣诞树
- cocos2dx系列之回调函数
- H3 BPM MVC表单SheetOffice控件使用分享