c# - 使用安静的 Web 服务
问题描述
我正在尝试使用一个界面,但我在这里遇到了一些困难。我正在尝试将其设置为内容页面后面的 xamrin 列表视图
public class xxxApiClient : IApi
{
readonly string url = "http://localhost:81/ ";
readonly IHttpService httpService;
public xxxApiClient(IHttpService httpService)
{
this.httpService = httpService;
}
public Task<List<JobsList>> GetJobs() => httpService.Get<List<JobsList>>($"{url}JobsLists");
}
我如何不确定我如何正确地使用 getjobs 我正在尝试以下
public partial class JobsPage : ContentPage ,xxxWC.Interface.IApi
{
public xxxWC.Interface.IApi api = new ful;
public JobsPage ()
{
InitializeComponent ();
}
private Task SetItemSource()
. {
. JobListing.ItemsSource = FuelAp
}
如何在 setItemSource 方法中正确使用上述 get 作业?
我很难理解的一点就在这里。
如何调用已在 API Client 中创建的基本 GetJobs 方法。
Task<List<JobsList>> IApi.GetJobs()
{
throw new NotImplementedException();
}
private Task SetItemSource()
{
JobListings.ItemsSource =await GetJobs();
}
}
编辑 2 好的,根据下面的建议我更新了我的代码
IHttpService httpService;
xxxApiClient _api = newxxxApiClient(httpService);
public JobsPage ()
{
InitializeComponent ();
}
private Task SetItemSource()
{
JobListings.ItemsSource =await GetJobs();
}
但我收到以下错误
严重性代码 描述 项目文件行抑制状态错误 CS0236 字段初始化程序无法引用非静态字段、方法或属性 'JobsPage.httpService' xxxCallManagmentAppMobile C:\Work\xxxCallAppDev\XamForms\xxxCallManagmentApp\xxxCallManagmentAppMobile\FuelCallManagmentAppMobile\Views\JobsPage。 xaml.cs 17 活动
有人可以解释为什么
编辑 3 好的,我走得更远了,但仍然有一些问题。由于没有等待主要方法,我该如何调用 set SetItemSource。
xxxApiClient _api ;
public JobsPage ()
{
InitializeComponent ()
SetItemSource();
}
private async Task SetItemSource()
{
JobListings.ItemsSource = await client.GetJobs();
}
解决方案
假设IApi
已经映射到xxxApiClient
实现
尝试使用DependencyService解析服务,以便在视图中使用它
public partial class JobsPage : ContentPage {
public readonly IApi client;
public JobsPage () {
InitializeComponent ();
client = DependencyService.Get<IApi>();
}
private async Task SetItemSource() {
JobListing.ItemsSource = await client.GetJobs();
//...
}
}
至于调用SetItemSource
,它是异步的,所以应该等待。这不能在构造函数中完成。
考虑创建一个可以引发的事件,其处理程序用于等待所需的行为。
private event EventHandler loadingData = delegate { };
private async void onLoadingData(object sender, Eventargs args) {
JobListing.ItemsSource = await client.GetJobs();
}
完整代码
public partial class JobsPage : ContentPage {
public readonly IApi client;
public JobsPage () {
InitializeComponent ();
//resolving client
client = DependencyService.Get<IApi>();
//subscribing to event
loadingData += onLoadingData;
//raising event
loadingData(this, EventArgs.Empty);
}
private async Task SetItemSource() {
JobListing.ItemsSource = await client.GetJobs();
//...
}
private event EventHandler loadingData = delegate { };
private async void onLoadingData(object sender, Eventargs args) {
JobListing.ItemsSource = await client.GetJobs();
}
}
尽管创建了自定义事件,但您可以轻松地使用视图的事件/事件处理程序。
所有这些代码实际上都应该存在于视图模型中,然后在绑定上下文中绑定到视图。
推荐阅读
- regex - 正则表达式 set =self 以逗号分隔的字符串
- javascript - 如何在 JSX 中结合 toLocaleString() 和 toFixed(2)?
- python - 图和子图刻度标签重叠
- python - 关系“project_app_category”处的编程错误不存在
- python - 从网络邮件中删除邮件 - 不适用于所有文件夹
- oauth-2.0 - 移动本机应用程序和纯 JS 客户端的 OAuth 2.0 客户端身份
- azure-active-directory - Azure AD B2C 租户
- electron - 在 Electron 中注册自定义协议以接受发布请求?
- c - 如何将 void 指针类型转换为 C 中的字符串?
- angular - 如何以角度模拟服务类的属性(Jasmine/Karma)