WPFINotifyPropertyChanged使用技巧
WPFINotifyPropertyChanged使用技巧
- public class NotifyPropertyChanged : INotifyPropertyChanged
- {
- public event PropertyChangedEventHandler PropertyChanged;
- public void NotifyChanged(string propertyName)
- {
- if (PropertyChanged != null)
- {
- PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
- }
- }
传统使用方法
这种方式称之为一般的实现方式, 因为它确实是太普通不过了, 而且使用起来也让人感到厌恶, 因为必须指定手工指定属性名称:如需要实现的属性过多,
则指定属性名是非常繁琐,无聊,容易出错,并且会使代码累赘。
于是通过另一种方式减少代码输入(本质就是传递当前发生改变属性的名称):
- #region 引发指定属性更改事件
- /// <summary>
- /// 引发指定属性更改事件
- /// </summary>
- public virtual void RaisePropertyChanged()
- {
- /*
- * 1.取当前调用堆栈的上一个方法(一般为属性内部的SetMethod)
- * 2.目前CLR对属性SetMethod方法的命名规则为“set_” + 属性名
- * 3.只要CLR依旧保持着这个命名规则,我们就可以自动忽略参数了
- */
- var stack = new StackTrace();
- var lastFrame = stack.GetFrame();
- var methodName = lastFrame.GetMethod().Name;
- var propertyName = methodName.Substring(methodName.LastIndexOf('_') + );
- this.NotifyChanged(propertyName);
- }
- #endregion
简单实现方式
- /// <summary>
- /// 实现INotifyPropertyChanged 向客户端发出某一属性值已更改的通知
- /// </summary>
- [SerializableAttribute]
- public class NotifyPropertyChanged : INotifyPropertyChanged
- {
- public event PropertyChangedEventHandler PropertyChanged;
- public void NotifyChanged(string propertyName)
- {
- if (PropertyChanged != null)
- {
- PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
- }
- }
- #region 引发指定属性更改事件
- /// <summary>
- /// 引发指定属性更改事件
- /// </summary>
- public virtual void RaisePropertyChanged()
- {
- /*
- * 1.取当前调用堆栈的上一个方法(一般为属性内部的SetMethod)
- * 2.目前CLR对属性SetMethod方法的命名规则为“set_” + 属性名
- * 3.只要CLR依旧保持着这个命名规则,我们就可以自动忽略参数了
- */
- var stack = new StackTrace();
- var lastFrame = stack.GetFrame();
- var methodName = lastFrame.GetMethod().Name;
- var propertyName = methodName.Substring(methodName.LastIndexOf('_') + );
- this.NotifyChanged(propertyName);
- }
- #endregion
- }
全部代码
WPFINotifyPropertyChanged使用技巧的更多相关文章
- 探究javascript对象和数组的异同,及函数变量缓存技巧
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...
- 前端极易被误导的css选择器权重计算及css内联样式的妙用技巧
记得大学时候,专业课的网页设计书籍里面讲过css选择器权重的计算:id是100,class是10,html标签是5等等,然后全部加起来的和进行比较... 我只想说:真是误人子弟,害人不浅! 最近,在前 ...
- 前端网络、JavaScript优化以及开发小技巧
一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...
- 工欲善其事,必先利其器 之 VS2013全攻略(安装,技巧,快捷键,插件)!
如有需要WPF工具的朋友可以移步 工欲善其事,必先利其器 之 WPF篇: 随着开发轨迹来看高效WPF开发的工具和技巧 之前一篇<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATI ...
- 15个关于Chrome的开发必备小技巧[译]
谷歌Chrome,是当前最流行且被众多web开发人员使用的浏览器.最快六周就更新发布一次以及伴随着它不断强大的开发组件,使得Chrome成为你必备的开发工具.例如,在线编辑CSS,console以及d ...
- Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具
前言 本文主要写给使用命令行来操作Git的用户,用于提高Git使用的效率.至于使用命令还是GUI(Tortoise Git或VS的Git插件)就不在此讨论了,大家根据自己的的喜好选择就好.我个人是比较 ...
- 【工具使用】mac电脑使用技巧
本文地址 分享提纲: 1. mac命令行和finder的交互 2. 一些mac的插件 3. 一些开发的配置 1.mac命令行和findder交互 1)命令行中打开当前文件夹: o ...
- Function.prototype.toString 的使用技巧
Function.prototype.toString这个原型方法可以帮助你获得函数的源代码, 比如: function hello ( msg ){ console.log("hello& ...
- SAP CRM 性能小技巧
导言 本页面打算收集SAP CRM实施中可以用于避免性能问题的注意事项,重要的事项会由图标标识. 如果你有其他的技巧想要说出来,别犹豫! 性能注意事项 通用 缓存读取类访问,特别是在性能关键的地方,比 ...
随机推荐
- html嵌套MP4、PDF的简单方案
你需要一个jquery.media插件,http://malsup.com/jquery/media/ 然后: <html><head><script src=" ...
- IOS Animation-CABasicAnimation、CAKeyframeAnimation详解&区别&联系
1.先看看网上流传的他们的继承图: 从上面可以看出CABasicAnimation与CAKeyframeAnimation都继承于CAPropertyAnimation.而CAPropertyAnim ...
- UStore-自定义JDF文件格式输出
系统默认的JDF输出不能满足我们的需求,往往不同的供应商输出不同要求的JDF格式.这里我们开始介绍ustore的自定义JDF输出 1.先屏蔽掉默认的JDF格式输出 我们进入Tigger来设置ustro ...
- Java中MVC详解以及优缺点总结
概念: MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务数据.逻辑.界面显示分离的 ...
- 锋利的JQuery —— JQuery性能优化
大图猛戳
- 程序员藏经阁 Linux兵书
程序员藏经阁 Linux兵书 刘丽霞 杨宇 编 ISBN 978-7-121-21992-4 2014年1月出版 定价:79.00元 536页 16开 内容提要 <Linux兵书>由浅 ...
- Java Synchronized Blocks
From http://tutorials.jenkov.com/java-concurrency/synchronized.html By Jakob Jenkov A Java synchro ...
- SSH无密码登录
首先生成密钥对 ssh-keygen -t rsa cd ~/.ssh/ cat id_rsa.pub 复制你生成的公钥 登录到需要免登录的服务器 cd ~/.ssh 添加到 authorized_k ...
- meta标签的小拓展
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1, ...
- backbone库学习-View
Backbone中的视图提供了一组处理DOM事件.和渲染模型(或集合)数据方法(在使用视图之前,你必须先导入jQuery或Zepto) 视图类提供的方法非常简单,我们一般在backbone.View的 ...