MVVM 中 ViewModelBase和 CommandBase

 1 public class ViewModelBase : INotifyPropertyChanged , IDisposable  
 2     {
 3         public virtual string DisplayName { get; protected set; }  
 4 
 5         public event PropertyChangedEventHandler PropertyChanged;
 6 
 7         protected void OnPropertyChanged([CallerMemberName]string propertyName = null)
 8         {
 9             if (PropertyChanged != null)
10             {
11                 PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
12             }
13         }
14 
15         public void Dispose()
16         {
17             this.OnDispose();
18         }
19 
20         /// <summary>  
21         /// 若支持IDisposable,请重写此方法,当被调用Dispose时会执行此方法。  
22         /// </summary>  
23         protected virtual void OnDispose()
24         {
25 
26         }  
27     }

 public class CommandBase : ICommand
    {
        private readonly Action<object> _command;
        private readonly Func<object, bool> _canExecute;

        public CommandBase(Action<object> command, Func<object, bool> canExecute)
        {
            if (command == null)
                throw new ArgumentNullException("command");
            _canExecute = canExecute;
            _command = command;  
        }

        public bool CanExecute(object parameter)
        {
            if (_canExecute == null)
                return true;
            return _canExecute(parameter); 
        }


        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }  

        public void Execute(object parameter)
        {
            _command(parameter);  
        }
    }

 

 

posted @ 2013-11-26 22:51  akiing  阅读(866)  评论(0编辑  收藏  举报