WPF MVVM模式开发实现简明教程 4 ViewModelBase
WPF MVVM模式开发实现简明教程 2 初识 INotifyPropertyChanged
WPF MVVM模式开发实现简明教程 3-1 BaseCommand
WPF MVVM模式开发实现简明教程 4 ViewModelBase
WPF MVVM模式开发简明实现教程 5 使用MultiValueConverter进行多参数事件绑定
WPF MVVM模式开发简明实现教程 7 DevExpress MVVM
如果多个ViewModel,则每个都要继承INotifyPropertyChanged,并且有如下相同的方法
1 2 3 4 5 6 | public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string propertyName) { PropertyChanged?.Invoke( this , new PropertyChangedEventArgs(propertyName)); } |
ViewModelBase 就是为了简化以上代码而出现的
版本1
直接把之前的代码放到一个类里,
调用时
public class ButtonViewModel : ViewModelBase
ViewModelBase 代码
1 2 3 4 5 6 7 8 9 10 | using System.ComponentModel; using System.Runtime.CompilerServices; public abstract class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string propertyName) { PropertyChanged?.Invoke( this , new PropertyChangedEventArgs(propertyName)); } } |
属性
1 2 3 4 5 6 7 8 9 10 11 | private string buttonContent; public string ButtonContent { get { return buttonContent; } set { buttonContent = value; OnPropertyChanged( "ButtonContent" ); } } |
版本2
优化,不用传propertyName 了
1 2 3 4 5 6 7 8 9 10 11 12 | using System.ComponentModel; using System.Runtime.CompilerServices; public abstract class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null ) { PropertyChanged?.Invoke( this , new PropertyChangedEventArgs(propertyName)); } } |
属性
1 2 3 4 5 6 7 8 9 10 11 | private string buttonContent; public string ButtonContent { get { return buttonContent; } set { buttonContent = value; OnPropertyChanged(); } } |
版本3
增加
1 2 3 4 5 6 7 8 | protected virtual bool SetProperty<T>( ref T storage, T value, [CallerMemberName] string propertyName = "" ) { if (EqualityComparer<T>.Default.Equals(storage, value)) return false ; storage = value; this .OnPropertyChanged(propertyName); return true ; } |
属性
1 2 3 4 5 6 | private string buttonContent; public string ButtonContent { get { return buttonContent; } set { SetProperty( ref buttonContent, value); }<em id= "__mceDel" >}</em> |
进一步简化代码
还有更简化的,可以参考后面的DevExpress版本的,当然也可以自己实现
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架