一篇文章教你如何用界面组件DevExpress WPF创建一个WPF视图模型
DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。
从DevExpress WPF控件v21.1版本开始,包含了一个View Model Code Generator,这个代码生成器允许您在编译时为视图模型生成样板代码。
Microsoft在 C# 9中引入了Source Generators ,您可以使用Source Generator分析用户代码并在编译期间生成新的源文件,我们利用这项 Microsoft 技术帮助您开发视图模型并立即获得生成的代码。
请注意,DevExpress MVVM框架已经包含了多种创建View Models的方法(例如基于Emit Reflection的POCO View Models在运行时创建View Models)。
这种新方法为您提供了许多重要的好处:
- 您可以在 Visual Studio 中查看生成的代码和调试。
- 生成的代码是在编译期间生成的,并且在应用程序启动时可用,因此这种新方法提高了启动性能。
使用生成的代码创建视图模型
要生成完整的视图模型,您需要定义一个指定所需逻辑的存根视图模型类,View Model Code Generator 分析您的实现和应用属性以生成最终的 View Model 类,以及所有必需的样板代码。
基础的视图模型
using DevExpress.Mvvm.CodeGenerators; [GenerateViewModel] partial class ViewModel { [GenerateProperty] string username; [GenerateProperty] string status; [GenerateCommand] void Login() => Status = "User: " + Username; bool CanLogin() => !string.IsNullOrEmpty(Username); }
生成的视图模型
- 属性
- 属性变更通知
- 命令声明
- INotifyPropertyChanged, INotifyPropertyChanging, IDataErrorInfo, ISupportServices实现
partial class ViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler? PropertyChanged; protected void RaisePropertyChanged(PropertyChangedEventArgs e) => PropertyChanged?.Invoke(this, e); public string? Username { get => username; set { if(EqualityComparer<string?>.Default.Equals(username, value)) return; username = value; RaisePropertyChanged(UsernameChangedEventArgs); } } public string? Status { get => status; set { if(EqualityComparer<string?>.Default.Equals(status, value)) return; status = value; RaisePropertyChanged(StatusChangedEventArgs); } } DelegateCommand? loginCommand; public DelegateCommand LoginCommand { get => loginCommand ??= new DelegateCommand(Login, CanLogin, true); } static PropertyChangedEventArgs UsernameChangedEventArgs = new PropertyChangedEventArgs(nameof(Username)); static PropertyChangedEventArgs StatusChangedEventArgs = new PropertyChangedEventArgs(nameof(Status)); }
方法
最佳的发展路线是将由每个单独的WPF项目驱动:
- 如果您使用最新的 C# 版本和 .NET Framework v4.6.1+ 或 .NET Core v3.0+,请考虑查看在编译时生成的模型。
- 如果您想保持对视图模型的完全控制,可以从基类集成您的视图模型。
- 如果您的项目不符合上述要求,或者您使用的是 Visual Basic(并且仍希望避免使用样板代码),那么 POCO 视图模型是一个不错的选择。
DevExpress技术交流群6:600715373 欢迎一起进群讨论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2021-09-07 Angular UI组件库入门指南 - 如何安装和开始使用(二)
2021-09-07 B/S端开发工具DevExtreme应用程序模板(四) - 配置主题
2018-09-07 DevExpress v18.1新版亮点——DevExtreme篇(一)
2017-09-07 使用MyEclipse开发Java EE应用:EJB项目开发初探(下)