news 2026/6/10 16:06:23

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/5/28 6:43:38

【列车手势识别】基于YOLO11与EMBSFPN的精准检测模型详解

1. 【列车手势识别】基于YOLO11与EMBSFPN的精准检测模型详解 1.1. Abstract 本文介绍了一种针对列车驾驶室手势识别的创新方法&#xff0c;结合了最新的YOLO11目标检测框架与改进的多尺度特征融合网络EMBSFPN。该方法通过引入注意力机制和动态特征选择策略&#xff0c;实现了…

作者头像 李华
网站建设 2026/6/8 15:33:02

如何优化TCP总结

如何优化TCP? 根据小林进行总结&#xff0c;详细内容可看这里 TCP三次握手性能提升 三次握手的过程在一个 HTTP 请求的平均时间占比 10% 以上&#xff0c;在网络状态不佳、高并发或者遭遇 SYN 攻击等场景中&#xff0c;如果不能有效正确的调节三次握手中的参数&#xff0c;就…

作者头像 李华
网站建设 2026/6/9 17:35:21

2、AR与VR在供应链中的应用:宏观视角分析

AR与VR在供应链中的应用:宏观视角分析 1. 引言 自2019年新冠疫情爆发以来,全球制造业的关注点迅速转向供应链网络,以提升其效率和效益。这促使企业重新设计服务和生产流程,并引入新的观点。工业4.0的出现带来了新的工业变革,它利用先进技术提升运营和供应链的各个方面。…

作者头像 李华
网站建设 2026/6/10 7:38:15

《Python 玩转海量日志处理:从入门到高效实战的全流程指南》

《Python 玩转海量日志处理&#xff1a;从入门到高效实战的全流程指南》 在现代软件系统中&#xff0c;日志就像一部系统的“日记本”——记录着每一次请求、每一个异常、每一段用户行为。它们是排查问题的第一现场&#xff0c;是性能优化的关键线索&#xff0c;更是数据分析和…

作者头像 李华
网站建设 2026/6/10 15:38:55

RoboTwin 2.0:双臂操作机器人的可扩展合成数据生成和基准设计

概述 机器人的双臂操纵对于装配操作、工具使用和物品运送等复杂的现实世界任务至关重要。然而&#xff0c;在真实世界环境中进行大规模数据收集在时间和成本方面都很困难&#xff0c;而且所学操纵策略的通用性也很有限。为了解决这个问题&#xff0c;本研究提出了一个名为 &quo…

作者头像 李华
网站建设 2026/6/10 12:06:32

11、构建OpenStack网络基础设施:从虚拟交换机到网络资源管理

构建OpenStack网络基础设施:从虚拟交换机到网络资源管理 1. 搭建基于Open vSwitch的虚拟交换基础设施 在部分计算节点和网络节点上,我们需要安装和配置Neutron Open vSwitch机制驱动和代理。以下是详细的步骤: 1.1 更新防火墙驱动配置 需要在compute02和compute03上更新…

作者头像 李华