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)});
                }
            }
       }
  • 相关阅读:
    Kubernetes1.91(K8s)安装部署过程(一)--证书安装
    开源仓库Harbor搭建及配置过程
    有关centos7 图形化root用户登录
    linux服务器查看tcp链接shell
    django表格form无法保存评论排查步骤
    Redis 4.x 安装及 发布/订阅实践和数据持久化设置
    django博客项目-设置django为中文语言
    windows 环境下如何使用virtualenv python环境管理工具
    【转载】python中利用smtplib发送邮件的3中方式 普通/ssl/tls
    php安装phpize工具
  • 原文地址:https://www.cnblogs.com/fenix/p/2081627.html
Copyright © 2011-2022 走看看