news 2026/4/16 20:34:56

DevExpress WPF中文教程:Data Grid - 如何绑定到有限制的自定义服务(一)?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DevExpress WPF中文教程:Data Grid - 如何绑定到有限制的自定义服务(一)?

DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能产品,都能通过DevExpress WPF控件来实现。

本文将演示如何将GridControl绑定到有限制的自定义服务(例如,不兼容的过滤器和排序),由于内容较多,我们将分为几篇文章来阐述,欢迎持续关注我们哟~

获取DevExpress WPF v25.1正式版下载

Step 1:获取数据并启用滚动

在此步骤中,您将创建一个虚拟源,从服务中获取行,并在GridControl中启用滚动。

注意:在本教程中,使用Issues Service作为数据源的示例。

获取数据和启用滚动

1. 添加一个GridControl,列对应于Issues Service的IssueData到您的项目窗口:

XAML

<dxg:GridControl x:Name="grid" > <dxg:GridControl.Columns> <dxg:GridColumn FieldName="Subject" /> <dxg:GridColumn FieldName="User" /> <dxg:GridColumn FieldName="Created" /> <dxg:GridColumn FieldName="Votes" /> <dxg:GridColumn FieldName="Tags" /> </dxg:GridControl.Columns> </dxg:GridControl>

注意GridControl不能显示Tags列的值,因为IssueData.Tags属性的类型是一个字符串数组。

2. 初始化虚拟源:

  • 创建一个虚拟源(本教程中的InfiniteAsyncSource)。
  • 创建自定义Tags属性并将字符串数组转换为单个字符串-逗号分隔的标签列表(参见CreateTagsProperty方法)。
  • 指定VirtualSourceBase.CustomProperties属性。

C#

public MainWindow() { InitializeComponent(); var source = new InfiniteAsyncSource() { CustomProperties = GetCustomProperties() }; } static DynamicPropertyDescriptor CreateTagsProperty() { return new DynamicPropertyDescriptor( name: "Tags", propertyType: typeof(string), getValue: x => string.Join(", ", ((IssueData)x).Tags)); } static PropertyDescriptorCollection GetCustomProperties() { var customProperties = TypeDescriptor.GetProperties(typeof(IssueData)) .Cast<PropertyDescriptor>() .Where(x => x.Name != "Tags") .Concat(new[] { CreateTagsProperty() }) .ToArray(); return new PropertyDescriptorCollection(customProperties); }

3. 处理虚拟源:

  • 处理窗口的Unloaded事件。
  • 调用VirtualSourceBase.Dispose方法。

C#

public MainWindow() { // ... Unloaded += (o, e) => { source.Dispose(); }; }

4. 从数据源获取行:

  • 处理InfiniteAsyncSource.FetchRows事件。
  • 使用 Issues Service的GetIssuesAsync方法获取数据。
  • 创建FetchRowsResult类对象并指定FetchRowsAsyncEventArgs.Result属性。

C#

public MainWindow() { // ... source.FetchRows += (o, e) => { e.Result = FetchRowsAsync(e); }; } static async Task<FetchRowsResult> FetchRowsAsync(FetchRowsAsyncEventArgs e) { IssueSortOrder sortOrder = GetIssueSortOrder(e); IssueFilter filter = MakeIssueFilter(e.Filter); const int pageSize = 30; var issues = await IssuesService.GetIssuesAsync( page: e.Skip / pageSize, pageSize: pageSize, sortOrder: sortOrder, filter: filter); return new FetchRowsResult(issues, hasMoreRows: issues.Length == pageSize); } static IssueSortOrder GetIssueSortOrder(FetchRowsAsyncEventArgs e) { return IssueSortOrder.Default; } static IssueFilter MakeIssueFilter(CriteriaOperator filter) { return null; }

通过将生成的虚拟源实例赋值给DataControlBase.ItemsSource属性,将GridControl绑定到虚拟源:

C#

public MainWindow() { // ... grid.ItemsSource = source; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 1:48:26

前端场景题,零基础入门到精通,收藏这篇就够了

前言 ​ 2026年的春招聘还有两个月就即将到来&#xff0c;为了帮助前端求职者提升复习效率&#xff0c;更快的拿到前端offer ​ 所以&#xff0c;我咨询了超过18位资深中大厂面试官后&#xff0c;准确精炼了一套切实可行的场景题&#xff0c;现在已经有432位粉丝通过这套题走…

作者头像 李华
网站建设 2026/4/14 12:09:09

写英文论文可不可以引用中文文献?

很多写SCI论文的同学经常会遇到一个问题&#xff1a;自己写的英文论文&#xff0c;不仅涉及到外文文献&#xff0c;同时也涉及到中文论文&#xff0c;是否可以引用中文参考文献呢&#xff1f; 答案是可以的。 中文文献也属于国际论文中重要参考文献的一部分&#xff0c;如果写…

作者头像 李华
网站建设 2026/4/16 15:04:31

2025大模型效率革命:Qwen3双模式切换重塑企业AI应用范式

2025大模型效率革命&#xff1a;Qwen3双模式切换重塑企业AI应用范式 【免费下载链接】Qwen3-32B-MLX-8bit 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-32B-MLX-8bit 导语 阿里通义千问Qwen3系列模型以创新的单模型双模式切换技术&#xff0c;重新定义大…

作者头像 李华
网站建设 2026/4/16 13:47:02

Qwen3-235B-FP8:千亿大模型落地革命,显存减半性能反超GPT-4o

Qwen3-235B-FP8&#xff1a;千亿大模型落地革命&#xff0c;显存减半性能反超GPT-4o 【免费下载链接】Qwen3-235B-A22B-Instruct-2507-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-235B-A22B-Instruct-2507-FP8 导语 阿里巴巴最新发布的Qwen3-235B-A…

作者头像 李华
网站建设 2026/4/16 11:51:52

机械手臂力矩控制的MATLAB实现方案

机械手臂力矩控制的MATLAB实现方案 1. 机械臂动力学基础 1.1 动力学方程 机械臂的动力学方程通常表示为&#xff1a; M(q)qC(q,q˙)q˙G(q)F(q˙)τM(q)\ddot{q} C(q,\dot{q})\dot{q} G(q) F(\dot{q}) \tauM(q)q​C(q,q˙​)q˙​G(q)F(q˙​)τ 其中&#xff1a; M(q)M(q)…

作者头像 李华