将主页上的 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");