WPF INotifyPropertyChanged
首先感叹一下,INotifyPropertyChanged这个单词有点长,我现在都还记不住……
其次再感叹一下,实现这个接口,属性的封装还是有点麻烦啊。
属性什么的我就喜欢 xxx{get;set;}……不得不说我是一个很懒的猿~
首先来看看一般的实现方式:

public class NotificationObject : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; /// <summary> /// 实现依赖属性 /// </summary> /// <param name="propertyName"></param> public void RaisePropertyChanged(string propertyName) { if (this.PropertyChanged != null) { this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } private string _userName; //private const string UserNameProperty="UserName"; public string UserName { get { return _userName; } set { _userName= value; this.RaisePropertyChanged("UserName");//这样的写法是不是很不爽? 或者this.RaisePropertyChanged(UserNameProperty) } } }
对于以上的写法,实在有点不爽,不写const字段吧,比较容易填错,写了吧,哎呀好费事儿啊。
很幸运的是不仅是我觉得麻烦,有大神已经给出了解决之道:(很抱歉,忘记是哪位大神的文章了,刚刚翻了一下没找到,这里就直接上代码了)

public static class NotificationObjectEx { /// <summary> /// 使用:RaisePropertyChanged(vm=>vm.属性) /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="TProperty"></typeparam> /// <param name="propertyChangedBase"></param> /// <param name="expression"></param> public static void RaisePropertyChanged<T, TProperty>(this T propertyChangedBase, Expression<Func<T, TProperty>> expression) where T : NotificationObject { var memberExpression = expression.Body as MemberExpression; if (memberExpression != null) { string propertyName = memberExpression.Member.Name; propertyChangedBase.RaisePropertyChanged(propertyName); } else throw new NotImplementedException(); } }
于是就可以这样:this.RaisePropertyChanged(vm=>vm.UserName); 是不是觉得爽多了?麻麻再也不用担心哦拼错属性名称了~
最后,好记性不如烂笔头~~INotifyPropertyChanged、INotifyPropertyChanged、INotifyPropertyChanged、INotifyPropertyChanged、INotifyPropertyChanged……
标签:
wpf
, INotifyPropertyChanged
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?