将主页上的 web api 中的数据传递到 xamarin 表单中的详细信息页面
Passing data from web api on the main page to the details page in xamarin forms
对于包含数据的页面,我的代码如下所示:
private async Task GetLeaveBalance() {
try
{
Uri = "http://192.168.42.35/API/api/leave/getbalance/"+ empId + "/"+ companyId;
client = new HttpClient();
var authHeaderValue = basic;
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authHeaderValue);
HttpResponseMessage response = await client.GetAsync(Uri);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode)
{
var emp = JsonConvert.DeserializeObject<List<Leave>>(responseBody);
dataGrid.ItemsSource = emp;
UserDialogs.Instance.HideLoading();
}
}
catch (HttpRequestException e)
{
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ", e.Message);
UserDialogs.Instance.ShowError(e.Message);
}
}
private void Button_Clicked(object sender, EventArgs e)
{
Navigation.PushAsync(new Details());
}
我的第二页(详细信息页面)有一个选择器,需要用我从 emp 变量获得的数据填充,所以我如何将数据从第一页传递到第二页(详细信息页面)?
考虑到您的方法和代码,您可以直接将数据传递给第二页的构造函数
List<Leave> leaves = new List<Leave>();
private async Task GetLeaveBalance() {
...
leaves = JsonConvert.DeserializeObject<List<Leave>>(responseBody);
...
}
private void Button_Clicked(object sender, EventArgs e)
{
Navigation.PushAsync(new Details(leaves));
}
您也可以通过 MessagingCenter,这里是一些步骤。
首先在您的 SecondPage 中注册一个 messagingcenter 任务。
MessagingCenter.Subscribe<SecondPage(you can create a empty interface if you want to use as type),string>(this, "PopulateSecondPage", (sender,DataFromMainPage) =>
{
//your code to handle DataFromMainPage
});
然后使用
传递数据
var page = new SecondPage();
Navigation.PushAsync(page);
MessagingCenter.Send<MainPage>(page, "PopulateSecondPage","Data you want to pass");
对于包含数据的页面,我的代码如下所示:
private async Task GetLeaveBalance() {
try
{
Uri = "http://192.168.42.35/API/api/leave/getbalance/"+ empId + "/"+ companyId;
client = new HttpClient();
var authHeaderValue = basic;
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authHeaderValue);
HttpResponseMessage response = await client.GetAsync(Uri);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode)
{
var emp = JsonConvert.DeserializeObject<List<Leave>>(responseBody);
dataGrid.ItemsSource = emp;
UserDialogs.Instance.HideLoading();
}
}
catch (HttpRequestException e)
{
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ", e.Message);
UserDialogs.Instance.ShowError(e.Message);
}
}
private void Button_Clicked(object sender, EventArgs e)
{
Navigation.PushAsync(new Details());
}
我的第二页(详细信息页面)有一个选择器,需要用我从 emp 变量获得的数据填充,所以我如何将数据从第一页传递到第二页(详细信息页面)?
考虑到您的方法和代码,您可以直接将数据传递给第二页的构造函数
List<Leave> leaves = new List<Leave>();
private async Task GetLeaveBalance() {
...
leaves = JsonConvert.DeserializeObject<List<Leave>>(responseBody);
...
}
private void Button_Clicked(object sender, EventArgs e)
{
Navigation.PushAsync(new Details(leaves));
}
您也可以通过 MessagingCenter,这里是一些步骤。
首先在您的 SecondPage 中注册一个 messagingcenter 任务。
MessagingCenter.Subscribe<SecondPage(you can create a empty interface if you want to use as type),string>(this, "PopulateSecondPage", (sender,DataFromMainPage) =>
{
//your code to handle DataFromMainPage
});
然后使用
传递数据 var page = new SecondPage();
Navigation.PushAsync(page);
MessagingCenter.Send<MainPage>(page, "PopulateSecondPage","Data you want to pass");