DevExpress WPF中文教程:Data Grid - 如何使用虚拟源?(二)
DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能产品,都能通过DevExpress WPF控件来实现。
本文将为大家一步一步演示如何在一个MVVM应用程序中使用虚拟源。
注意:本教程使用Issues Service作为示例数据源,使用InfiniteAsyncSource作为虚拟数据源。
获取DevExpress WPF v25.1正式版下载
Step 2:启用排序操作
开发者可以允许用户在GridControl中对行进行排序,完成以下步骤:
- 在虚拟源中实现排序操作。
- 在GridControl中启用排序操作。

订单排序
Issues Service(问题服务)允许您应用以下排序顺序:
- Default(默认) – 记录按照从最新到最老的顺序显示。
- Created Date(已创建日期) – 记录按最新到最老的顺序显示。
- Votes (投票)– 记录按升序或降序显示。
C#
public enum IssueSortOrder {
Default,
CreatedDescending,
VotesAscending,
VotesDescending
}
下面的代码片段在GridControl中实现了默认的排序顺序:
C#
[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;
}
实现细节
在虚拟源中实现排序操作
- 使用SortDefinition类实例获取GridControl排序选项。
- 解析排序选项并返回排序顺序,绑定到InfiniteAsyncSourceFetchRowsCommand属性的任何命令都在GridControl获取行时使用排序顺序。
C#
static IssueSortOrder GetIssueSortOrder(SortDefinition[] sortOrder) {
if (sortOrder.Length > 0) {
var sort = sortOrder.Single();
if (sort.PropertyName == "Created") {
if (sort.Direction != ListSortDirection.Descending)
throw new InvalidOperationException();
return IssueSortOrder.CreatedDescending;
}
if (sort.PropertyName == "Votes") {
return sort.Direction == ListSortDirection.Ascending
? IssueSortOrder.VotesAscending
: IssueSortOrder.VotesDescending;
}
}
return IssueSortOrder.Default;
}
启用“Votes”列排序操作
- 给ColumnBase.AllowSorting属性赋值true。
- 将ColumnBase.DefaultSortOrder属性设置为Descending来指定默认排序顺序,当用户第一次单击列的标题时应用此顺序。
xml
<dxg:GridColumn FieldName="Votes"
AllowSorting="True"
DefaultSortOrder="Descending"/>
启用“Created Date”列排序操作
- 给 ColumnBase.AllowSorting属性赋值true。
- Issues Service只能按已创建日期字段降序对行进行排序,将ColumnBase.AllowedSortOrders属性设置为Descending,来从UI中禁用该列的其他排序顺序。
xml
<dxg:GridColumn FieldName="Created"
AllowSorting="True"
AllowedSortOrders="Descending"/>
在本教程中,Issues Service只能按单列对数据进行排序。如果您的数据源可以按多列排序数据,请将GridViewBase.AllowGroupingSortingBySingleColumnOnly属性设置为False。在这种情况下,GridControl可以按多列排序,用户应按住Shift键并单击所需的列标题,以便根据这些列对数据进行排序。
更改排序顺序
Created Date列允许用户仅按降序对数据进行排序。当用户单击列标题时,GridControl不会更改排序顺序,用户应按住Ctrl键并单击列标题来清除列的排序顺序。
将DataViewBaseColumnSortClearMode属性设置为Click,这允许用户通过单击列标题应用或清除排序顺序:
xml
<dxg:GridControl.View>
<dxg:TableView ColumnSortClearMode="Click"/>
</dxg:GridControl.View>