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

注意:本教程使用Issues Service作为示例数据源,使用InfiniteAsyncSource作为虚拟数据源。
DevExpress技术交流群11:749942875 欢迎一起进群讨论
Step 1:获取数据
本节将创建一个虚拟源,并从Issues Service中获取数据行。

实现细节
创建一个ViewModel(视图模型)
创建一个ViewModel,用命令从数据源获取行,如下所示:
1. 创建一个FetchIssues命令。
2. 使用IssuesService.GetIssuesAsync方法从数据源获取数据。
3. 创建FetchRowsResult对象并将其分配给FetchAsyncArgsBase.Result属性。
C#
using DevExpress.Mvvm; using DevExpress.Mvvm.DataAnnotations; using DevExpress.Mvvm.Xpf; using DevExpress.Xpf.Data; public class IssueViewModel : ViewModelBase { [Command] public void FetchIssues(FetchRowsAsyncArgs args) { args.Result = GetIssuesAsync(args); } async Task<FetchRowsResult> GetIssuesAsync(FetchRowsAsyncArgs args) { var take = args.Take ?? 30; var issues = await IssuesService.GetIssuesAsync( skip: args.Skip, take: take, sortOrder: GetIssueSortOrder(args.SortOrder), filter: null); return new FetchRowsResult(issues, hasMoreRows: issues.Length == take); } static IssueSortOrder GetIssueSortOrder(SortDefinition[] sortOrder) { return IssueSortOrder.Default; } }
提示:有关GetIssueSortOrder方法实现的其他信息,我们将在下篇文章中详细介绍。
创建一个GridControl
添加一个GridControl,其列对应于View中的IssuesService.IssueData字段:
xml
<dxg:GridControl> <dxg:GridControl.Columns> <dxg:GridColumn FieldName="Subject" IsSmart="True"/> <dxg:GridColumn FieldName="User" IsSmart="True"/> <dxg:GridColumn FieldName="Created" IsSmart="True"/> <dxg:GridColumn FieldName="Votes" IsSmart="True"/> <dxg:GridColumn FieldName="Priority" IsSmart="True"/> </dxg:GridControl.Columns> </dxg:GridControl>
将Data Grid绑定到虚拟源
初始化一个虚拟源并从数据源中获取行:
- 将虚拟源实例(本教程中的InfiniteAsyncSource)分配给DataControlBase.ItemsSource属性。
- 将VirtualSourceBase.ElementType属性设置为从数据源检索的行类型(本教程中的IssueData)。如果您的服务返回未类型化的对象(例如,转换为动态对象的JSON对象),则指定VirtualSourceBase.CustomProperties属性。
- 定义允许窗口与ViewModel一起工作的窗口数据上下文。
- 将FetchIssues命令绑定到InfiniteAsyncSource.FetchRowsCommand属性。
xml
<Window xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"> <Window.DataContext> <local:IssueViewModel/> </Window.DataContext> <dxg:GridControl> <dxg:GridControl.ItemsSource> <dx:InfiniteAsyncSource ElementType="{x:Type local:IssueData}" FetchRowsCommand="{Binding FetchIssuesCommand}"/> </dxg:GridControl.ItemsSource> <!-- ... --> </dxg:GridControl> </Window>
具体说明
- 如果在数据源级别更改了数据,请调用RefreshRows()方法来重新加载数据。
- FetchRowsEventArgsBase.Take属性返回需要重新加载的行数,使用FetchRowsEventArgsBase.Take属性来允许InfiniteAsyncSource在刷新后保留选中的行和滚动位置,PagedAsyncSource自动保留选中的行和滚动位置。
- 如果源中的数据经常更改,则可以在刷新后保留相同的选定行,指定VirtualSourceBase.KeyProperty来使虚拟源通过特定字段查找所选行。
- 当GridControl显示最后加载的行时,虚拟源获取行的下一部分,将FetchMode设置为Manual来改变此操作。
- 您可以调用FetchMoreRows()方法来强制FetchRowsCommand / FetchRows并加载下一部分数据。
更多产品资讯及授权,欢迎来电咨询:023-68661681
更多DevExpress线上公开课、中文教程资讯请上中文网获取
关于慧都科技
慧都是⼀家⾏业数字化解决⽅案公司,专注于软件、⽯油与⼯业领域,以深⼊的业务理解和⾏业经验,帮助企业实现智能化转型与持续竞争优势。
慧都是DevExpress的中国区的合作伙伴,DevExpress作为用户界面领域的优秀产品,帮助企业高效构建权限管理、数据可视化(如网格/图表/仪表盘)、跨平台系统(WinForms/ASP.NET/.NET MAUI)及行业定制解决方案,加速开发并强化交互体验。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:DevExpress控件中文网 [https://www.devexpresscn.com/]
本文地址:https://www.devexpresscn.com/post/5492.html
相关产品: DevExpress WPF Subscription, DevExpress Universal Subscription,