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); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步