如何优雅的实现INotifyPropertyChanged接口

作者&投稿:妫炎 (若有异议请与网页底部的电邮联系)
如何优雅的实现INotifyPropertyChanged接口~

InotifyPropertyChanged接口实现分一下几个步骤:
1、定义了一个类,实现接口,实现了绑定和数据的同步(代码如下)
public class person : IMyPropertyChanged
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (value != _name)
{
_name = value;
//when changed ,notice
NotifyChanged(Name);
}
}
}
}
public class IMyPropertyChanged : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
2、随着定义的person对象属性越来越多,可能有年纪,毕业院校,爱好,性取向等等等,岂不是要写很多类似以上的重复代码?而且,最要命的是,以上方面采用的是硬代码,很容易编译通过,而却出错,我们要采用强类型才行!(专业性较强,2年内程序员的可能看不懂)
public class IMyPropertyChanged : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyChanged(Expression> propertyName)
{
if (PropertyChanged != null)
{
var memberExpression = propertyName.Body as MemberExpression;
if (memberExpression != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(memberExpression.Member.Name));
}
}
}
}
public class person : IMyPropertyChanged
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (value != _name)
{
_name = value;
//when changed ,notice
NotifyChanged(() => this.Name);
}
}
}
}
3、我们要封装这个操作,那就定义一个静态类:
public class PropertyChangedBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

public void NotifyPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public static class IMyPropertyChangedEX
{
public static void NotifyPropertyChanged(this T iMyPropertyChanged,
Expression> expression) where T : IMyPropertyChanged
{
var memberExpression = expression.Body as MemberExpression;
if (memberExpression != null)
{
string propertyName = memberExpression.Member.Name;
iMyPropertyChanged.NotifyPropertyChanged(propertyName);
}
else
throw new NotImplementedException();
}
}
4、在person里面编写绑定的属性的更改通知时,就可以这么写:
public class person : IMyPropertyChanged
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (value != _name)
{
_name = value;
//when changed ,notice
this.NotifyPropertyChanged(p => p.Name); ---!!!!!!

InotifyPropertyChanged接口实现分一下几个步骤:
1、定义了一个类,实现接口,实现了绑定和数据的同步(代码如下)
public class person : IMyPropertyChanged
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (value != _name)
{
_name = value;
//when changed ,notice
NotifyChanged(Name);
}
}
}
}
public class IMyPropertyChanged : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
2、随着定义的person对象属性越来越多,可能有年纪,毕业院校,爱好,性取向等等等,岂不是要写很多类似以上的重复代码?而且,最要命的是,以上方面采用的是硬代码,很容易编译通过,而却出错,我们要采用强类型才行!(专业性较强,2年内程序员的可能看不懂)
public class IMyPropertyChanged : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyChanged(Expression> propertyName)
{
if (PropertyChanged != null)
{
var memberExpression = propertyName.Body as MemberExpression;
if (memberExpression != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(memberExpression.Member.Name));
}
}
}
}
public class person : IMyPropertyChanged
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (value != _name)
{
_name = value;
//when changed ,notice
NotifyChanged(() => this.Name);
}
}
}
}
3、我们要封装这个操作,那就定义一个静态类:
public class PropertyChangedBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

public void NotifyPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public static class IMyPropertyChangedEX
{
public static void NotifyPropertyChanged(this T iMyPropertyChanged,
Expression> expression) where T : IMyPropertyChanged
{
var memberExpression = expression.Body as MemberExpression;
if (memberExpression != null)
{
string propertyName = memberExpression.Member.Name;
iMyPropertyChanged.NotifyPropertyChanged(propertyName);
}
else
throw new NotImplementedException();
}
}
4、在person里面编写绑定的属性的更改通知时,就可以这么写:
public class person : IMyPropertyChanged
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (value != _name)
{
_name = value;
//when changed ,notice
this.NotifyPropertyChanged(p => p.Name); ---!!!!!!

InotifyPropertyChanged接口实现分一下几个步骤:
1、定义了一个类,实现接口,实现了绑定和数据的同步(代码如下)
public class person : IMyPropertyChanged
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (value != _name)
{
_name = value;
//when changed ,notice
NotifyChanged(Name);
}
}
}
}
public class IMyPropertyChanged : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
2、随着定义的person对象属性越来越多,可能有年纪,毕业院校,爱好,性取向等等等,岂不是要写很多类似以上的重复代码?而且,最要命的是,以上方面采用的是硬代码,很容易编译通过,而却出错,我们要采用强类型才行!(专业性较强,2年内程序员的可能看不懂)
public class IMyPropertyChanged : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyChanged<T>(Expression<Func<T>> propertyName)
{
if (PropertyChanged != null)
{
var memberExpression = propertyName.Body as MemberExpression;
if (memberExpression != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(memberExpression.Member.Name));
}
}
}
}
public class person : IMyPropertyChanged
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (value != _name)
{
_name = value;
//when changed ,notice
NotifyChanged<string>(() => this.Name);
}
}
}
}
3、我们要封装这个操作,那就定义一个静态类:
public class PropertyChangedBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

public void NotifyPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public static class IMyPropertyChangedEX
{
public static void NotifyPropertyChanged<T, TProperty>(this T iMyPropertyChanged,
Expression<Func<T, TProperty>> expression) where T : IMyPropertyChanged
{
var memberExpression = expression.Body as MemberExpression;
if (memberExpression != null)
{
string propertyName = memberExpression.Member.Name;
iMyPropertyChanged.NotifyPropertyChanged(propertyName);
}
else
throw new NotImplementedException();
}
}
4、在person里面编写绑定的属性的更改通知时,就可以这么写:
public class person : IMyPropertyChanged
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (value != _name)
{
_name = value;
//when changed ,notice
this.NotifyPropertyChanged(p => p.Name); ---!!!!!!


岷江杜鹃相关的种
防城杜鹃(Rhododendron fangchengense P. C. Tam)和钝头杜鹃(Rhododendron farinosum H. Lév.)来自不同的地理区域,各自有其独特的生长习性。繁花杜鹃(Rhododendron floribundum Franch.)和台湾杜鹃(Rhododendron formosanum Hemsl.)以其繁茂的花朵展示着旺盛的生命力。光枝杜鹃(Rhododendron haofui ...

一片有关于迈耶 莱文的作文
一个个新颖的形象就这样展现在我们的面前:在以直线为主,不时穿插曲线的几何体中,透过比例优雅的玻璃墙面,清楚地显现出内部的景象,这些有纵深感的空间与...他只不过将前人所曾使用的语汇加以重组,而产生某种新的意义罢了;例如史密斯住宅,只不过是勒·柯布西耶的多米诺(Dom-ino)与西楚汉(Chitrohan)两种原型的重组...

领带如何打
专业打领带大法!首先选出一条自己喜欢的领带,比划好要系的长度;领带正面面对自己,然后绕两圈;把第一圈的抽出来,套上长领带;拉住第二圈,调节好长度,这样就完成了哦!

男士休闲裤子怎么搭配?
最受欢迎的就是即欧版裤型即腰部没有任何褶,看上去颇为平整,显得腿部修长。据介绍,这种裤型胖人穿起来也很合体。所以体型比较健美的男士最好是关注这种裤型,而有啤酒肚的男士也不要拒绝,不妨一试。当然,腰部比较壮观的男士无论是从健康角度,还是从穿出完美形象考虑,减肥是非常必要的。FARINO...

好听的英文名
这个名字和“Valetino”这个牌子很像,它来源于拉丁语,意思是“健康、强壮”。这个名字听起来就会让人感觉是一个很独立的女人。如果你是,那么这个名字就很...Brian的发音为[?bra??n],读起来比较婉转、有层次感,优雅动听。名字由五个字母组成,简洁大气。翻译成中文是“布里安”,看上去也是很有个性特点的,而且...

五营区19331355948: 如何优雅的实现INotifyPropertyChanged接口 -
关毓茵莲: InotifyPropertyChanged接口实现分一下几个步骤:1、定义了一个类,实现接口,实现了绑定和数据的同步(代码如下) public class person : IMyPropertyChanged { private string _name; public string Name { get { return _name; } set { if (value != _...

五营区19331355948: 如何优雅的实现INotifyPropertyChanged接口 -
关毓茵莲: 如果你这些类继承自同一个根基类的话那么只用在根基类实现该接口就行了啊

五营区19331355948: 如何优雅地使用OneNote -
关毓茵莲: 场景一:会议记录 这个最多还是在pc上使用,因为触屏的键盘太操蛋,surface pro配type cover无敌好用,on里面随意插入录音,插入照片,不用担心排版,配合tab制表健快速理顺会议内容

五营区19331355948: C/C++ 中怎样优雅的写多判断 if 语句 -
关毓茵莲: if(条件) { 语句;} else if(条件) { 语句;} else { 语句;}

五营区19331355948: 如何优雅的在手机上写Python -
关毓茵莲: 优雅不一定,但是很方便的方法(命令行下):python-mpipinstallpandas

五营区19331355948: jpa 如何优雅的实现动态sql -
关毓茵莲: 案例 1. 动态语言注解 import www.ijava.com.entity.User;/** (1)动态语言注解 对于创建动态的查的语言.MyBatis提供了多个注解如:@InsertProvider,@UpdateProvider,@DeleteProvider和 @SelectProvider,这些都是建立动态语言和让MyBatis执...

五营区19331355948: 如何在 Laravel5 上优雅的统计从数据库中取出来的结果数 -
关毓茵莲: 更优雅的是用 scope, 在 User model 里面加下面 method public function scopeVerified($query) { return $query->where('verify', 1); } 然后 User::verified()->count();

五营区19331355948: 如何优雅的实现javascript两个json安全对象的比较 -
关毓茵莲: var a = {a:1,b:2};var b = a;console.log(JSON.stringify(a) === JSON.stringify(b))

五营区19331355948: 如何优雅地进行页面间的跳转 -
关毓茵莲: 1、改变当前页面的url实现跳转:例如 window.location="http://www.5ieg.com";2、在当前窗口打开新页面也可以实现页面跳转:window.open("http://www.5ieg.com",'_self') ;

五营区19331355948: 如何用java方法最优雅的实现斐波那契数列 -
关毓茵莲: 其实所有的递归都可以用循环来写,区别是有的程序用递归写起来更加容易,能够提高程序执行的效率.关关于斐波那契数列用递归会更加好.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网