• 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)});
                }
            }
       }
  • 相关阅读:
    Linux配置SSH公钥认证与Jenkins远程登录进行自动发布
    在阳台上种花生
    已知传递函数,求幅频响应?
    win8快速锁屏
    word2016怎么让目录索引显示在左边?
    Matlab 瑞利信道仿真
    rayleighchan实现瑞利多径衰落信
    2017电商趋势
    【连载7】二手电商平台的账号与信用体系
    【连载6】二手电商APP的导购功能与关系链机制分析
  • 原文地址:https://www.cnblogs.com/fenix/p/2081627.html
Copyright © 2020-2023  润新知