一篇文章教你如何用界面组件DevExpress WPF创建一个WPF视图模型
DevExpress WPF拥有120个控件和库将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。DevExpress新旧版本帮助文档下载 可进QQ qun获取169725316从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(EqualityComparerstring?.Default.Equals(username, value)) return; username value; RaisePropertyChanged(UsernameChangedEventArgs); } } public string? Status { get status; set { if(EqualityComparerstring?.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 视图模型是一个不错的选择。