使用Xamarin.Forms使按钮在当前时间过去之后可见

时间:2019-04-02 11:34:32

标签: xamarin xamarin.forms

我有一个列表视图,其中显示了当前用户的用药时间表,它当前按下一个到期日对列表进行排序,并且当前时间之后的所有用药都将移至列表的底部。

我一直在寻找使当前时间已过的药物具有“明天”按钮的功能。这可能吗?

目前,这是我填充列表视图的方式:

/// <summary>
/// Gets User Medication list
/// </summary>
/// <returns>The user meds.</returns>
async public Task GetUserMedsOverdue()
{
    MedicationListOverdue.ItemsSource = null;
    UserMedTimesOverdue.Clear(); //Clears the list before calling API (prevents duplication)

    main.Children.Add(MedicationListOverdue);
    main.Children.Remove(NoMeds);

    if (!CrossConnectivity.Current.IsConnected)
    {
        main.Children.Remove(MedicationListOverdue);
        main.Children.Add(NoMeds);
        NoMeds.Text = "No Internet Connection - Please check your connection";
        NoMeds.Margin = new Thickness(35, 35, 20, 20);

        BusyIndicator.IsRunning = false;
    }

    else
    {
        BusyIndicator.IsRunning = true;
        //var usermed = await medicinemanager.CurrentClient.InvokeApiAsync<IEnumerable<usermedication>>("getusermednamejoin?userid=" + Helpers.Settings.UserKey + "", System.Net.Http.HttpMethod.Get, null);

        try
        {
            var usermeddosagetimeoverdue = await medicinemanager.CurrentClient.InvokeApiAsync("getUserMedDosageTimeOverdue?userid=" + Helpers.Settings.UserKey, null, HttpMethod.Get, await App.LoadAPIKeyAsync(), null);

            var responseContentoverdue = await usermeddosagetimeoverdue.Content.ReadAsStringAsync();
            var useroverdue = JsonConvert.DeserializeObject<ObservableCollection<UserMedDosagePayLoadOverdue>>(responseContentoverdue);

            //var usermeddosagetime = await medicinemanager.CurrentClient.InvokeApiAsync<IEnumerable<UserMedDosagePayLoad>>("getusermeddosagetime?userid=" + Helpers.Settings.UserKey + "", HttpMethod.Get, API, System.Threading.CancellationToken.None);
            //null, System.Net.Http.HttpMethod.Get, API, System.Threading.CancellationToken.None);

            Debug.WriteLine("UserMedDosageTime" + usermeddosagetimeoverdue);

            foreach (UserMedDosagePayLoadOverdue item in useroverdue)
            {
                UserMedTimesOverdue.Add(item);
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.ToString());
        }

        FindNextDue(UserMedTimes);

        //Get the List of meds the user is on
        //UserMedList = await usermedicationmanager.getUserMedication();

        //foreach (usermedication item in usermed)
        //{
        //    if (item.IsActive != false)
        //    {
        //        UserMedList.Add(item);
        //    }
        //}

        if (UserMedTimes.Count != 0)
        {
            MedicationListOverdue.ItemsSource = UserMedTimesOverdue;
            BusyIndicator.IsRunning = false;      
        }

        else
        {
            Label MedLogo = new Label();
            MedLogo.Text = peoplewithfonticon.meds;
            MedLogo.FontFamily = "icomoon";
            MedLogo.FontSize = 80;
            MedLogo.Margin = new Thickness(30, 80, 0, 0);

            Label MedTitle = new Label();
            MedTitle.Text = "No \r\nMedications";
            MedTitle.FontSize = 50;
            MedTitle.FontAttributes = FontAttributes.Bold;
            MedTitle.Margin = new Thickness(30, 0, 0, 0);

            Label NoMeds = new Label();
            NoMeds.Margin = new Thickness(30, 0, 0, 0);
            main.Children.Remove(MedicationList);
            //main.Children.Remove(btnHistory);
            main.Children.Add(MedLogo);
            main.Children.Add(MedTitle);
            main.Children.Add(NoMeds);
            NoMeds.Text = "You haven't added any medications to your medication cupboard yet";
            //main.Children.Add(btnHistory);
            BusyIndicator.IsRunning = false;
        }

        MedicationListOverdue.ItemsSource = UserMedTimesOverdue;

        BusyIndicator.IsRunning = false;
    }
}

//订购时间集合,因此下一个到期日始终是第一个

TimeComparison = new List<TimeSpan>(TimeComparison.OrderBy(h => h.Hours).ThenBy(m => m.Minutes));
List<string> UserMedIDs = new List<string>();

for (int i = 0; i < TimeComparison.Count(); i++)
{
    DateTime NextDue = DateTime.Now.Add(TimeComparison[i]);
    DateTime NextDueToCompare = new DateTime(NextDue.Year, NextDue.Month, NextDue.Day, NextDue.Hour, NextDue.Minute, 0);
    string NextDueComparisonString = NextDueToCompare.ToString("HH:mm:ss");

    foreach (UserMedDosagePayLoad item in UserMedTimes)
    {
        if (item.Time == NextDueComparisonString && !UserMedIDs.Contains(item.Usermedid))
        {
            UserMedTimesFilteredList.Add(item);
            UserMedIDs.Add(item.Usermedid);                        
        }
    }

    UserMedTimes = medtimes;
    MedicationList.ItemsSource = UserMedTimesFilteredList.OrderBy(X => NextDue);
    BusyIndicator.IsRunning = false;
}

0 个答案:

没有答案