zoukankan      html  css  js  c++  java
  • MVVM

     public class ViewModelCollection<T> : ObservableCollection<T>
        {
            
    public ViewModelCollection()
                : 
    base()
            {

            }

            
    public new event PropertyChangedEventHandler PropertyChanged;

            
    public new void Add(T item)
            {

                ((INotifyPropertyChanged)item).PropertyChanged 
    += (sender, e) =>
                    {
                        
    if (PropertyChanged != null)
                        {
                            PropertyChanged(sender, 
    new PropertyChangedEventArgs(e.PropertyName));
                        }
                    };
                
    base.Add(item);
            }
        }
     public class RelayCommand : ICommand
        {
            
    private Action _handler;
            
    public RelayCommand(Action handler)
            {
                _handler 
    = handler;
            }

            
    private bool _isEnabled;
            
    public bool IsEnabled
            {
                
    get { return _isEnabled; }
                
    set
                {
                    
    if (value != _isEnabled)
                    {
                        _isEnabled 
    = value;
                        
    if (CanExecuteChanged != null)
                        {
                            CanExecuteChanged(
    this, EventArgs.Empty);
                        }
                    }
                }
            }

            
    public bool CanExecute(object parameter)
            {
                
    return IsEnabled;
            }

            
    public event EventHandler CanExecuteChanged;

            
    public void Execute(object parameter)
            {
                _handler();
            }
        }
     
     
    public class Employee : INotifyPropertyChanged

    {

        public event PropertyChangedEventHandler PropertyChanged;



        private string _firstName;

        public string FirstName 

        {

           get { return this._firstName; }

           set

           {

              this._firstName = value;

              this.PropertyChanged.Notify(()=>this.FirstName);

           }

        }

    }
     
     
    public static class NotificationExtensions
        {
            public static void Notify(this PropertyChangedEventHandlereventHandler, Expression<Func<object>> expression)
            {
                if( null == eventHandler )
                {
                    return;
                }
                var lambda = expression as LambdaExpression;
                MemberExpression memberExpression;
                if (lambda.Body is UnaryExpression)
                {
                    var unaryExpression = lambda.Body as UnaryExpression;
                    memberExpression = unaryExpression.Operand asMemberExpression;
                }
                else
                {
                    memberExpression = lambda.Body as MemberExpression;
                }
                var constantExpression = memberExpression.Expression asConstantExpression;
                var propertyInfo = memberExpression.Member as PropertyInfo;
                
                foreach (var del in eventHandler.GetInvocationList())
                {
                    del.DynamicInvoke(new object[] {constantExpression.Value, newPropertyChangedEventArgs(propertyInfo.Name)});
                }
            }
       }
  • 相关阅读:
    数据结构-顺序表
    数据结构-概论
    社交网络图中结点的“重要性”计算 (30 分) C++解法
    面向对象程序设计--Java语言第二周编程题:有秒计时的数字时钟
    面向对象程序设计--Java语言第三周编程题:查找里程
    面向对象程序设计--Java语言第一周编程题:分数
    剑指Offer_#42_连续子数组的最大和
    vue--模态框背景不动解决方案
    redis(十七):Redis 安装,部署(WINDOWS环境下)
    redis(二十一):Redis 架构模式实现(哨兵)
  • 原文地址:https://www.cnblogs.com/fenix/p/2081627.html
Copyright © 2011-2022 走看看