翻譯|使用教程|編輯:龔雪|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
文章轉載自:慧都網