zoukankan      html  css  js  c++  java
  • 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(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
        }
    全部代码
  • 相关阅读:
    文件操作
    set集合,深浅拷贝
    is 和 == 区别 id()函数
    字典
    列表
    基本数据类型
    第十二章 if测试和语法规则
    第十一章 赋值、表达式和打印
    第十章 python语句简介
    第九章元组、文件及其他
  • 原文地址:https://www.cnblogs.com/nov5026/p/5463753.html
Copyright © 2011-2022 走看看