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)});
                }
            }
       }
  • 相关阅读:
    hibernate 多对多 最佳实践
    世界上速度最快的输入法 Fleksy 为了支持中国
    他们控制的定义-DragButton
    怎么样linux下的目录名的目录,系统用来操作空间
    无形的力量,看得见的手
    如何设置eclipse在默认模式下打开文件
    【比赛组织和共享源代码】那些红卫兵游戏
    [Oracle] 分析功能(1)- 语法
    SAP ABAP第一,两,三代出口型BADI实现 解释的概念
    JSP简单的练习-功能标签
  • 原文地址:https://www.cnblogs.com/fenix/p/2081627.html
Copyright © 2011-2022 走看看