码迷,mamicode.com
首页 > Windows程序 > 详细

WPFINotifyPropertyChanged使用技巧

时间:2016-05-06 00:51:24      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:

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(1);
            var methodName = lastFrame.GetMethod().Name;

            var propertyName = methodName.Substring(methodName.LastIndexOf(_) + 1);
            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(1);
            var methodName = lastFrame.GetMethod().Name;

            var propertyName = methodName.Substring(methodName.LastIndexOf(_) + 1);
            this.NotifyChanged(propertyName);
        } 
        #endregion
    }
全部代码

 

WPFINotifyPropertyChanged使用技巧

标签:

原文地址:http://www.cnblogs.com/nov5026/p/5463753.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!