将我们的网络 .NET SDK 集成到 WPF 数据网格中
上周刚刚推出的 StellarDS SDK for .NET 提供了一种强大且结构化的方式来与基于云的数据进行交互。此 SDK 旨在简化开发和优化 API 交互,它提供强类型、直观的设计和无缝集成 - 让您轻松使用 StellarDS。作为一种快速且可扩展的后端即服务 (BaaS) 解决方案,StellarDS.io 可处理存储、安全性和可扩展性,因此您可以专注于构建出色的应用程序,而无需担心后端复杂性。通过其强大的 REST API,开发人员可以高效地检索和操作数据,同时确保流畅的性能。
演示
由于此演示包含大量源代码,我们不会详细介绍每一行。相反,我们提供了完整的源代码,您可以在此处下载,它是 Github 存储库的一部分。
在这篇博文中,我们将重点介绍应用程序的核心功能——它如何工作以及如何集成 StellarDS .Net SDK。我们将跳过 UI 设计方面和其他细节,将重点放在关键的实施步骤上。
创建我们的应用程序
首先,打开 Visual Studio 并使用 .NET 9 创建一个新的 WPF 应用程序。
创建项目后,我们需要安装所需的依赖项。我们的应用程序与 StellarDS.io 交互并需要某些库。在 Visual Studio 中打开 NuGet 包管理器 并安装以下内容:
1. StellarDS SDK → StellarDs.SDK
2. WebView2 → Microsoft.Web.WebView2
3. 依赖注入 → Microsoft.Extensions.DependencyInjection
这些包将允许我们与 StellarDS API 交互,显示基于 Web 的内容(如果需要),并有效地管理依赖项。
Appsettings
为了保持 API 配置的灵活性,我们将它们存储在 appsettings.json 文件中。这使我们能够轻松更改设置而无需修改代码。
在项目的根目录中创建一个 appsettings.json 文件并添加以下内容:
"StellarDSSettings": {
"ApiKey": "",
"ClientId": "",
"Secret": "",
"ReturnURL": "http://localhost:3030",
"AuthCodeURL": "https://stellards.io/oauth"
}
ApiUrl 定义了 StellarDS 的基本 URL,ApiKey 用于进行 API 调用时的身份验证。请务必将“your-api-key-here”替换为您的实际密钥。
依赖注入
设置应用程序的第一步是启用依赖注入 (DI)。通过使用 DI,我们可以将 SDK 类注册为服务,使它们在整个应用程序中都易于访问。
为了实现这一点,我们需要重写 App.xaml.cs 中的 OnStartup 方法并对其进行如下修改:
protected override void OnStartup(StartupEventArgs e)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true);
Configuration = builder.Build();
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
_serviceProvider = serviceCollection.BuildServiceProvider();
var mainWindow = _serviceProvider.GetRequiredService();
mainWindow.Show();
}
接下来,我们需要定义 ConfigureServices 方法,在该方法中我们在 ServiceCollection 中注册所有必需的服务。这可确保我们的 API 客户端、配置设置和其他依赖项得到正确管理。您可以像这样添加该方法:
private void ConfigureServices(ServiceCollection serviceCollection)
{
serviceCollection.AddTransient();
var config = new StellarDs.SDK.Client.Configuration();
var oauthConfig = Configuration?.GetSection("StellarDSSettings").Get();
if (oauthConfig == null) return;"
config.ApiKey.Add("Authorization", oauthConfig.ApiKey);
config.ApiKeyPrefix.Add("Authorization", "Bearer");
var dataApi = new DataApi(config);
var oauthApi = new OAuthApi( new StellarDs.SDK.Client.Configuration());
serviceCollection.AddSingleton(dataApi);
serviceCollection.AddSingleton(oauthApi);
serviceCollection.AddSingleton(oauthConfig);
serviceCollection.AddSingleton();
}
创建我们的视图
为了显示我们的客户列表,我们将使用 WPF DataGrid。DataGrid 控件提供了一种在 UI 中显示和管理表格数据的简便方法。
打开 MainWindow.xaml 并在 元素内添加以下 DataGrid:
CanUserDeleteRows="True">
现在我们已经在表单中添加了 DataGrid,下一步是集成必要的服务,以便我们检索和管理客户数据。我们使用依赖注入 (DI) 实现这一点,确保我们的应用程序保持模块化和可维护性。
为此,请修改 MainWindow 的构造函数,如下所示:
public MainWindow(DataApi dataApi, RefreshTimer refreshTimer, OauthConfiguration oauthConfiguration)
{
_dataApi = dataApi;
_refreshTimer = refreshTimer;
_oauthConfiguration = oauthConfiguration;
InitializeComponent();
}
这可确保我们的 API 客户端、令牌刷新处理程序和 OAuth 配置在整个应用程序中都可用。
现在我们已经设置了依赖注入,让我们仔细看看如何从 StellarDS API 中检索数据并填充我们的 DataGrid。以下方法 GetData 负责获取客户数据并将其显示在 UI 中。让我们一步一步地分解。
要从 StellarDS 检索客户记录,我们需要一种向 API 发送请求的异步方法。在 MainWindow.xaml.cs 中,添加以下方法:
private async Task GetData(int take = 0, int offset = 0)
此方法将负责从 StellarDS 检索数据。take 和 offset 这两个参数允许我们控制分页:
· take 指定每个请求要获取多少条记录。
· offset 决定从哪里开始检索数据(加载下一页时很有用)。
通过使此方法异步,我们确保它在后台运行,而不会在等待 API 响应时冻结 UI。
接下来,在 GetData 方法内部,我们调用 StellarDS API 来检索数据:
var result = await _dataApi.GetAsync(_project, Table, offset, take);
以下是具体情况:
· _dataApi 是我们 StellarDS 的 API 客户端实例,通过依赖注入进行注入。
· _project 是我们的 StellarDS 项目 ID,它指定我们正在查询哪个数据集。
· Table 是存储客户记录的数据库表的名称。
· offset 和 take 用于分页,允许我们一次只加载一部分数据,而不是一次检索所有内容。
调用 _dataApi.GetAsync() 后,API 将返回包含以下内容的响应:
· 所请求的数据(客户记录列表)。
· 可用记录的总数。
· 成功状态,表示请求是否成功。
在继续处理数据之前,我们需要验证 API 请求是否成功。在 GetData 中添加以下检查:
if (result is not { IsSuccess: true, Data: not null }) return;
这确保了:
· API 请求成功(IsSuccess:true)。
· 返回的数据不为空(意味着我们确实收到了记录)。
如果请求失败,我们会提前退出该方法以防止出现错误。
StellarDS 返回的数据是 JSON 格式,因此我们需要先将其转换为 C# 对象,然后才能在应用程序中使用它。添加以下内容:
var source = data.Select(d => d.ToObject()).ToList();
这一行:
· 循环遍历数据中的每个 JSON 记录。
· 使用 .ToObject() 将其转换为 Customer 对象。
· 将转换后的记录存储在源中,源是客户对象的列表。
通过将 JSON 转换为强类型对象,我们可以在 C# 代码中更轻松地处理数据。
现在我们有了客户对象列表,我们需要在 DataGrid 中显示它们。添加以下行:
DataGrid.ItemsSource = source;
这会将源列表分配给 DataGrid 的 ItemsSource 属性,该属性会自动更新 UI 并显示客户记录。
使用 DataGrid 创建和编辑记录
为了支持 WPF DataGrid 中的内联编辑和记录创建,我们使用 RowEditEnding 事件将更新发送到 StellarDS。由于修改网格内的数据可以递归触发此事件,因此我们首先在处理编辑之前取消订阅:
dataGrid.RowEditEnding -= DataGrid_OnRowEditEnding;
dataGrid.CommitEdit();
然后,我们提取编辑后的记录,确保它是一个有效的客户对象,并在将其发送到 API 之前删除 Id 字段:
if (e.EditAction != DataGridEditAction.Commit){
dataGrid.RowEditEnding += DataGrid_OnRowEditEnding;
return;
}
此时,我们确定是否更新现有记录或创建新记录。每次 API 调用之前,我们都会刷新访问令牌以确保身份验证有效。
如果客户已经有 ID,我们会发送 PUT 请求来更新记录:
if (e.Row.DataContext is not Customer rep){
dataGrid.RowEditEnding += DataGrid_OnRowEditEnding;
return;
}
var request = rep.AsDictionary();
request.Remove("Id");
如果 Id 为空,则表示该记录是新的,因此我们发送 POST 请求来创建它:
else{
_dataApi.Configuration.ApiKey["Authorization"] = await _refreshTimer.RefreshAccessToken();
var result = await _dataApi.PostAsync(_project, Table,
new CreateRecordRequest(new List> { request }));
if (result.IsSuccess) await GetData(10, _offset);
}
最后,我们重新订阅该事件以确保处理未来的编辑:
dataGrid.RowEditEnding += DataGrid_OnRowEditEnding;
这可以防止提交编辑时发生递归事件调用,确保每次编辑只发生一次 API 请求。它还可以使 DataGrid 保持响应而不会发生冲突。
为了允许用户删除记录,我们首先需要在表单中添加一个删除按钮。打开您的 XAML 文件并在布局中添加以下按钮:
在 ButtonBase_OnClick 事件中,我们从 DataGrid 检索选定的记录,并向 StellarDS 的 API 发送 DELETE 请求。如果成功,我们将刷新数据以更新 UI:
private async void ButtonBase_OnClick(object sender, RoutedEventArgs e){
var rep = (Customer)DataGrid.SelectedItem;
await _dataApi.DeleteAsync(Guid.Parse("5f28959b-f6cd-43f1-64eb-08dcc0e23b55"), 288, (int)rep.Id);
await GetData(10, _offset);
}
这可确保当用户选择一条记录并点击“删除”时,该记录会从 StellarDS 和 DataGrid 中删除。
此演示展示了如何使用 StellarDS .NET SDK 有效地管理 StellarDS 项目中的表。我们构建了一个 WPF 应用程序,允许用户查看、创建、更新和删除表中的记录,同时集成依赖注入以获得更好的结构和可维护性。UI 使用 WPF 的 DataGrid 构建,提供了一种熟悉且有效的数据交互方式。
到目前为止,我们已经设置了 WPF 项目,集成了 StellarDS SDK,并实现了用于管理记录的核心 CRUD 功能。在第二部分中,我们将通过实现 OAuth2 身份验证进一步实现这一点,允许用户在应用程序内安全地进行身份验证和管理他们的会话。
StellarDS C# SDK 现已推出,其中包含示例代码和详细文档,可帮助您快速上手。探索我们的客户管理演示,深入了解 SDK 的功能,并立即开始使用 StellarDS 构建强大的应用程序。
下载 SDK 或查看文档,立即开始使用!