没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:龚雪|2025-10-22 10:45:59.963|阅读 6 次
概述:本文主要介绍如何在MVVM应用程序中使用虚拟源,欢迎下载最新版组件体验!
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
相关链接:
DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能产品,都能通过DevExpress WPF控件来实现。
本文将为大家一步一步演示如何在一个MVVM应用程序中使用虚拟源。
注意:本教程使用作为示例数据源,使用作为虚拟数据源。
DevExpress技术交流群12:1028386091 欢迎一起进群讨论
您可以允许用户在GridControl中过滤行,完成以下步骤:
1. 在虚拟源中实现过滤操作。
2. 在GridControl中启用过滤器操作。
可以获取行:
C#
public class IssueFilter {
public Priority? Priority { get; private set; }
public DateTime? CreatedFrom { get; private set; }
public DateTime? CreatedTo { get; private set; }
public int? MinVotes { get; private set; }
}
下面的代码片段获取不带过滤条件的行:
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);
}
1. 创建一个过滤器转换器。
2. 获取GridControl过滤器。
3. 解析过滤器并返回一个IssueFilter(模型中使用的类型),绑定到的命令在GridControl获取行时使用过滤器。
C#
public class IssueFilterConverter : MarkupExtension, IValueConverter {
object IValueConverter.Convert(object filter, Type targetType, object parameter, CultureInfo culture) {
return ((CriteriaOperator)filter).Match(
binary: (propertyName, value, type) => {
if (propertyName == "Votes" && type == BinaryOperatorType.GreaterOrEqual)
return new IssueFilter(minVotes: (int)value);
if (propertyName == "Priority" && type == BinaryOperatorType.Equal)
return new IssueFilter(priority: (Priority)value);
if (propertyName == "Created") {
if (type == BinaryOperatorType.GreaterOrEqual)
return new IssueFilter(createdFrom: (DateTime)value);
if (type == BinaryOperatorType.Less)
return new IssueFilter(createdTo: (DateTime)value);
}
throw new InvalidOperationException();
},
and: filters => {
return new IssueFilter(
createdFrom: filters.Select(x => x.CreatedFrom).SingleOrDefault(x => x != null),
createdTo: filters.Select(x => x.CreatedTo).SingleOrDefault(x => x != null),
minVotes: filters.Select(x => x.MinVotes).SingleOrDefault(x => x != null),
priority: filters.Select(x => x.Priority).SingleOrDefault(x => x != null)
);
},
@null: default(IssueFilter)
);
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
public override object ProvideValue(IServiceProvider serviceProvider) => this;
}
提示:
上面的代码示例使用了FilterCriteriaMatchHelper.Match方法,该方法允许您解析GridControl创建的过滤条件。
FilterCriteriaMatchHelper是来自DevExpress.Xpf.Grid.v25.1.Extensions.dll库的扩展。
4. 将过滤器转化器分配给属性,View中指定的过滤器转换器允许您避免在ViewModel中引用DevExpressData命名空间。
XML
<dxg:GridControl CriteriaConverter="{local:IssueFilterConverter}"/>
如果您可以在ViewModel中引用DevExpress.Data命名空间,则创建一个方法来解析ViewModel中的GridControl过滤器。
5. 当您指定属性时,属性返回Object类型的过滤器,可以将此过滤器转换为过滤器转换器(本教程中的IssueFilter)返回的类型。
C#
[Command]
public void FetchIssues(FetchRowsAsyncArgs args) {
args.Result = GetIssuesAsync(args);
}
async Task<FetchRowsResult> GetIssuesAsync(FetchRowsAsyncArgs args) {
var take = Math.Min(args.Take ?? 30, 100);
var issues = await IssuesService.GetIssuesAsync(
skip: args.Skip,
take: take,
sortOrder: GetIssueSortOrder(args.SortOrder),
filter: (IssueFilter)args.Filter
);
return new FetchRowsResult(issues, hasMoreRows: issues.Length == take);
}
获取优先级列表,并在Priority列下拉过滤器中显示它们:
1. 创建GetUniqueValues命令。
2. 使用属性获取GridControl为其收集唯一值的字段名。
3. 获取唯一值列表并将其分配给Result属性。
4. 将命令绑定到。
C#
[Command]
public void GetUniqueValues(GetUniqueValuesAsyncArgs args) {
if(args.PropertyName == "Priority") {
var values = Enum.GetValues(typeof(Priority)).Cast<object>().ToArray();
args.Result = Task.FromResult(values);
} else {
throw new InvalidOperationException();
}
}
XML
<dxg:GridControl CriteriaConverter="{local:IssueFilterConverter}">
<dxg:GridControl.ItemsSource>
<dx:InfiniteAsyncSource ElementType="{x:Type local:IssueData}"
FetchRowsCommand="{Binding FetchIssuesCommand}"
GetUniqueValuesCommand="{Binding GetUniqueValuesCommand}"/>
</dxg:GridControl.ItemsSource>
<!-- ... -->
</dxg:GridControl>
如果服务或数据库包含获取唯一值的方法,请在GetUniqueValues命令中使用该方法。
允许用户通过Priority列过滤GridControl行,如下所示:
1. 将属性设置为Equals,来允许用户显示具有指定优先级的行。
2. 将ColumnBaseFilterPopupMode属性设置为List,来启用允许用户一次选择一个项的下拉过滤器。
XML
<dxg:GridColumn FieldName="Priority" AllowedBinaryFilters="Equals" FilterPopupMode="List"/>
允许用户按Votes列过滤GridControl行,如下所示:
1. 将属性设置为GreaterOrEqual,来以允许用户显示投票值大于或等于输入值的行。
2. 将属性设置为Excel,来启用允许用户创建GreaterOrEqual标准的下拉过滤器。
XML
<dxg:GridColumn FieldName="Votes" AllowedBinaryFilters="GreaterOrEqual" FilterPopupMode="Excel"/>
允许用户按Created Date(创建日期)列过滤GridControl行,如下所示:
1. 将属性设置为SingleDateRange,来允许用户按单个日期或日期范围过滤行。
2. 将属性设置为DateSmart,来启用允许用户指定日期的日历。
XML
<dxg:GridColumn FieldName="Created" AllowedDateTimeFilters="SingleDateRange" FilterPopupMode="DateSmart"/>
更多产品资讯及授权,欢迎来电咨询:023-68661681
慧都是⼀家⾏业数字化解决⽅案公司,专注于软件、⽯油与⼯业领域,以深⼊的业务理解和⾏业经验,帮助企业实现智能化转型与持续竞争优势。
慧都是DevExpress的中国区的合作伙伴,DevExpress作为用户界面领域的优秀产品,帮助企业高效构建权限管理、数据可视化(如网格/图表/仪表盘)、跨平台系统(WinForms/ASP.NET/.NET MAUI)及行业定制解决方案,加速开发并强化交互体验。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@ke049m.cn
文章转载自:慧都网



本文主要介绍如何在MVVM应用程序中使用虚拟源,欢迎下载最新版组件体验!
加密软件通常通过监控和限制进程对文件的访问来实施数据保护,但这也可能误拦截合法的测试操作。例如,在分析代码时,需要读取源文件、写入临时数据并调用多个子进程,如果这些活动被加密软件阻断,测试将无法完成。为此,我们需按照“主进程-子进程-可访问文件类型”的层次结构,系统性地配置白名单。
本教程主要为大家介绍如何使用DevExpress WinForms数据网格控件按值排序或显示文本,欢迎下载最新版组件体验!
在自动化单元测试过程中,针对包含复杂数据类型或依赖外部资源的函数参数,测试工具往往难以自动生成有效的测试输入。为此,Parasoft C/C++test 提供了工厂函数机制,允许用户通过自定义的初始化逻辑,指导测试引擎构造合法且适用的参数对象。
相关产品
高效MVVM开发模式,WPF界面解决方案首选工具,帮助企业实现酷炫动效界面。
DevExpress Universal Subscription优秀的界面控件开发包,帮助企业构建卓越应用!
DevExpress DXperience Subscription高性价比的企业级.NET用户界面套包,助力企业创建卓越应用!
最新文章 MORE
半岛外围网上直营相关的文章 MORE
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@ke049m.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
半岛外围网上直营