MVVMにおけるViewModelBaseとCommandBase

6463 ワード

 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);  

        }

    }