C#WPF MVVM的简单实现

INotifyPropertyChanged接口的实现

internal class NotifyPropertyChanged : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
		
    	//属性变化时间通知
        protected void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
		//使用堆栈跟踪找寻属性名调用属性变化
        protected void RaisePropertyChanged()
        {
            var stack = new StackTrace();
            var lastFrame = stack.GetFrame(1);
            var methodName = lastFrame.GetMethod().Name;
            OnPropertyChanged(methodName);
        }
    }

ICommand接口的简单实现

public class RelayCommand : ICommand
    {
        // 通知命令能不能执行
        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }

        //判断命令能不能执行
        public bool CanExecute(object parameter)
        {
            return true;
        }

        //当命令执行的时候执行什么事情
        public void Execute(object parameter)
        {
            if (ExcutedAction == null)
            {
                return;
            }
            ExcutedAction();
        }
    
    	//下面是类的构造函数和传进来命令执行时候调用的委托
        public Action ExcutedAction { get; set; }

        public Func<object,bool> CanExcutedFunc { get; set; }

        public RelayCommand(Action action)
        {
            ExcutedAction = action;
        }
    }
原文地址:https://www.cnblogs.com/niaofei123/p/15055876.html