news 2026/9/8 3:52:24

一篇文章教你如何用界面组件DevExpress WPF创建一个WPF视图模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一篇文章教你如何用界面组件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(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 视图模型是一个不错的选择。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 1:10:51

样式系统的可维护写法

样式系统的可维护写法CSS 新能力适合解决明确的布局或动画问题。先写可读的默认样式&#xff0c;再逐步加入增强方案。 先明确要解决的问题 本文聚焦测量与回归。示例用于说明实现思路&#xff0c;不对应某次线上事故&#xff0c;也不代表固定的性能结果。 若观察无法复现&…

作者头像 李华
网站建设 2026/8/30 14:10:21

多智能体系统的工程约束:从Uncle Bob到swarm-forge的启示

当你第一次看到 unclebob / swarm-forge 这个组合时&#xff0c;第一反应很可能是&#xff1a;搞了三十多年“整洁代码”的 Robert C. Martin&#xff0c;怎么和一个听起来像科幻片里“蜂群锻造厂”的名字放在一起了&#xff1f;这里有一种强烈的错位感&#xff0c;而错位感往…

作者头像 李华
网站建设 2026/8/30 9:54:26

基于DEAP数据集的情绪识别实战:从预处理到模型构建完整指南

简介&#xff1a;情绪识别是情感计算与脑机接口领域的核心应用之一&#xff0c;其基本原理是通过分析生理信号&#xff08;如脑电图EEG&#xff09;来推断个体的情绪状态。在技术实现上&#xff0c;通常遵循数据预处理、特征工程与模型构建的流程。其中&#xff0c;特征工程是提…

作者头像 李华
网站建设 2026/8/31 12:28:04

JWT的“exp”声明有什么作用?底层原理是什么?

JWT的“exp”声明用于指定JWT的过期时间。这个声明告诉接收者&#xff0c;在什么时间之后这个JWT就不应该再被接受了&#xff0c;因为它已经“过期”了。这是一个重要的安全特性&#xff0c;因为它可以防止旧的或者被盗用的JWT被无限期地使用。想象一下你去电影院看电影&#x…

作者头像 李华
网站建设 2026/8/30 18:33:38

2026年GPU云服务商选型指南:五大Neocloud平台对比分析

过去两年&#xff0c;大模型训练、微调和推理的需求快速增长&#xff0c;GPU 云服务市场出现了大量新玩家。和传统的 AWS、Azure、GCP 不同&#xff0c;这些服务商从第一天起就把 NVIDIA GPU 集群作为核心产品&#xff0c;围绕 InfiniBand 网络、Kubernetes 调度、按秒计费和大…

作者头像 李华
网站建设 2026/8/31 4:23:41

ComfyUI 入门教程:三步装好本地环境,接出第一条出图工作流

ComfyUI 入门教程&#xff1a;三步装好本地环境&#xff0c;接出第一条出图工作流 【免费下载链接】ComfyUI The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface. 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI…

作者头像 李华