DevExpress WPF中文教程:Data Grid - 如何使用虚拟源?(一)

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

本文将为大家一步一步演示如何在一个MVVM应用程序中使用虚拟源。

注意 :本教程使用Issues Service作为示例数据源,使用InfiniteAsyncSource作为虚拟数据源。

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

Step 1:获取数据

本节将创建一个虚拟源,并从Issues Service中获取数据行。

实现细节

创建一个ViewModel(视图模型)

创建一个ViewModel,用命令从数据源获取行,如下所示:

  1. 创建一个FetchIssues命令。

  2. 使用IssuesService.GetIssuesAsync方法从数据源获取数据。

  3. 创建FetchRowsResult对象并将其分配给FetchAsyncArgsBase.Result属性。

C#

cs 复制代码
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

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绑定到虚拟源

初始化一个虚拟源并从数据源中获取行:

  1. 将虚拟源实例(本教程中的InfiniteAsyncSource)分配给DataControlBase.ItemsSource属性。
  2. VirtualSourceBase.ElementType属性设置为从数据源检索的行类型(本教程中的IssueData)。如果您的服务返回未类型化的对象(例如,转换为动态对象的JSON对象),则指定VirtualSourceBase.CustomProperties属性。
  3. 定义允许窗口与ViewModel一起工作的窗口数据上下文。
  4. 将FetchIssues命令绑定到InfiniteAsyncSource.FetchRowsCommand属性。

xml

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>

具体说明

相关推荐
加号34 小时前
【C#】 串口通信技术深度解析及实现
开发语言·c#
无风听海6 小时前
C# 隐式转换深度解析
java·开发语言·c#
LateFrames6 小时前
520 - 如何说晚安 (WPF)
c#·wpf·浪漫·ui体验
魔法阵维护师7 小时前
从零开发游戏需要学习的c#模块,第十四章(保存和加载)
学习·游戏·c#
Xin_ye1008611 小时前
C# 零基础到精通教程 - 第十一章:LINQ——语言集成查询
开发语言·c#
Xin_ye1008611 小时前
C# 零基础到精通教程 - 第十章:集合与泛型——高效管理数据
开发语言·c#
魔法阵维护师13 小时前
从零开发游戏需要学习的c#模块,第十一章(rpg小游戏入门,上篇,地图与移动)
学习·游戏·c#
雪豹阿伟13 小时前
8.C# —— 随机数、DateTime时间、字符串
c#·上位机
天下无敌笨笨熊13 小时前
C#常用三方库使用心得
开发语言·c#
魔法阵维护师14 小时前
从零开发游戏需要学习的c#模块,第十三章(rpg小游戏入门,下篇,地图敌人与战斗触发)
学习·游戏·c#