原創|使用教程|編輯:龔雪|2025-11-05 10:17:39.583|閱讀 4 次
概述:本文主要介紹如何在MVVM應用程序中使用虛擬源,歡迎下載最新版組件體驗!
#慧都22周年慶大促·界面/圖表報表/文檔/IDE/IOT/測試等千款熱門軟控件火熱促銷中>>
相關鏈接:
DevExpress WPF擁有120+個控件和庫,將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序,這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件的衍伸產品,還是以數據為中心的商業智能產品,都能通過DevExpress WPF控件來實現。
本文將為大家一步一步演示如何在一個MVVM應用程序中使用虛擬源。
注意:本教程使用作為示例數據源,使用作為虛擬數據源。
DevExpress技術交流群12:1028386091 歡迎一起進群討論
您可以允許用戶在GridControl中編輯數據。
1. 為用戶可以編輯的列啟用ColumnBaseAllowEditing屬性。
2. 設置屬性為 / 來啟用編輯整行模式。
3. 創建一個Issues Service的UpdateRowAsync方法將更改保存到數據源的任務。
4. 在ViewModel中創建UpdateIssue命令,要異步保存更改,請將任務分配給RowValidationArgsResultAsync屬性。
5. 將命令綁定到。
xml
<dxg:GridControl>
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="Subject" IsSmart="True" AllowEditing="True"/>
<dxg:GridColumn FieldName="User" IsSmart="True" AllowEditing="True"/>
<dxg:GridColumn FieldName="Created" IsSmart="True" AllowEditing="True"/>
<dxg:GridColumn FieldName="Votes" IsSmart="True" AllowEditing="True"/>
<dxg:GridColumn FieldName="Priority" IsSmart="True" AllowEditing="True"/>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView ShowUpdateRowButtons="OnCellEditorOpen"
ValidateRowCommand="{Binding UpdateIssueCommand}"/>
</dxg:GridControl.View>
</dxg:GridControl>
C#
[Command]
public void UpdateIssue(RowValidationArgs args) {
args.ResultAsync = UpdateIssueAsync((IssueData)args.Item);
}
static async Task<ValidationErrorInfo> UpdateIssueAsync(IssueData issue) {
await IssuesService.UpdateRowAsync(issue);
return null;
}
本節主要介紹Issues Service,本教程將此服務用作示例數據源,它的API類似于StackExchange Questions API。
Issues Service是一個靜態類:
C#
public static class IssuesService {
public async static Task<IssueData[]> GetIssuesAsync(int skip, int take, IssueSortOrder sortOrder, IssueFilter filter);
public async static Task<UserData[]> GetUsersAsync();
public async static Task<IssuesSummaries> GetSummariesAsync(IssueFilter filter);
public async static Task UpdateRowAsync(IssueData row);
}
GetIssuesAsync方法返回一個任務,允許您獲取一個包含以下數據的頁面:
C#
public class IssueData {
public int Id { get; private set; }
public string Subject { get; set; }
public int UserId { get; set; }
public DateTime Created { get; set; }
public int Votes { get; set; }
public Priority Priority { get; set; }
}
Issues Service允許您應用以下排序順序:
C#
public enum IssueSortOrder {
Default,
CreatedDescending,
VotesAscending,
VotesDescending,
}
Issues Service允許您應用以下過濾器:
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; }
}
GetUsersAsync方法返回一個任務,允許您獲取一個用戶集合:
C#
public class UserData {
public int Id { get; }
public string FirstName { get; }
public string LastName { get; }
public string FullName => FirstName + " " + LastName;
}
GetSummariesAsync方法返回一個任務,允許您獲得行的總數和最后創建對象的日期時間:
C#
public class IssuesSummaries {
public int Count { get; private set; }
public DateTime? LastCreated { get; private set; }
}
UpdateRowAsync方法返回一個任務,該任務允許您向數據源提交更改。
GridControl在讀取操作期間顯示一個加載指示器,因為Issues Service以短時間延遲返回數據:
C#
public async static Task<IssueData[]> GetIssuesAsync(int skip, int take, IssueSortOrder sortOrder, IssueFilter filter) {
await Task.Delay(300).ConfigureAwait(false);
// ...
}
public async static Task<UserData[]> GetUsersAsync() {
await Task.Delay(300).ConfigureAwait(false);
// ...
}
public async static Task<IssuesSummaries> GetSummariesAsync(IssueFilter filter) {
await Task.Delay(300).ConfigureAwait(false);
// ...
}
public async static Task UpdateRowAsync(IssueData row) {
// ...
await Task.Delay(500).ConfigureAwait(false);
}
更多產品資訊及授權,歡迎來電咨詢:023-68661681
慧都是?家?業數字化解決?案公司,專注于軟件、?油與?業領域,以深?的業務理解和?業經驗,幫助企業實現智能化轉型與持續競爭優勢。
慧都是DevExpress的中國區的合作伙伴,DevExpress作為用戶界面領域的優秀產品,幫助企業高效構建權限管理、數據可視化(如網格/圖表/儀表盤)、跨平臺系統(WinForms/ASP.NET/.NET MAUI)及行業定制解決方案,加速開發并強化交互體驗。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉載自:慧都網