C#怎么实现MVVM模式 C#如何在WPF中使用MVVM设计模式分离视图和逻辑【架构】

张开发
2026/4/17 9:15:57 15 分钟阅读

分享文章

C#怎么实现MVVM模式 C#如何在WPF中使用MVVM设计模式分离视图和逻辑【架构】
WPF中ViewModel响应按钮点击应通过ICommand绑定而非CodeBehind事件需用RelayCommand等实现类配合CommunityToolkit.Mvvm的[RelayCommand]和[ObservableProperty]特性自动处理命令与属性通知确保DataContext正确设置及集合使用ObservableCollection。WPF里不写CodeBehind逻辑怎么让ViewModel响应按钮点击靠命令ICommand不是事件处理函数。WPF的Button.Command绑定到ViewModel里的ICommand属性而不是在.xaml.cs里写Click事件。常见错误是直接在ViewModel里写void OnClick()然后试图用Command{Binding OnClick}——这不行Command绑定的目标必须是实现了ICommand的对象比如RelayCommand或DelegateCommand。RelayCommand不是.NET内置类得自己写或引用CommunityToolkit.Mvvm推荐用CommunityToolkit.Mvvm时继承ObservableObject再用[RelayCommand]特性自动生成命令属性命令执行方法名不能带括号例如Save不是Save()[RelayCommand]会自动产生SaveCommand属性如果命令需要参数方法签名得是void Save(object parameter)XAML里用CommandParameter传值为什么INotifyPropertyChanged手动实现容易出错因为忘了调用OnPropertyChanged或者字符串字面量写错比如Name写成name导致UI不更新又没报错问题难定位。现代做法是用CommunityToolkit.Mvvm的源生成器标记属性为[ObservableProperty]它会在编译时生成NotifyPropertyChanged逻辑和后台字段零反射、零字符串硬编码。不用手写set { _name value; OnPropertyChanged(); }不用记nameof(Name)改名时属性名自动同步如果用了旧式手动实现务必检查所有OnPropertyChanged(XXX)里的字符串是否和属性名完全一致大小写敏感调试时可在OnPropertyChanged里加断点确认是否被调用但源生成器方式无法断点进生成代码得看输出窗口的Generated文件DataContext设错整个MVVM就失效WPF不会自动把ViewModel塞进View你得显式设置DataContext。设错位置或时机绑定全白忙。 唱鸭 音乐创作全流程的AI自动作曲工具集 AI 辅助作词、AI 自动作曲、编曲、混音于一体

更多文章