在 CalendarView Xamarin 中显示列表中的日期

Display Dates from a List in a CalendarView Xamarin

我有一个来自这个 Xamarin.Plugin.Calendar nuget 包的 CalendarioView。 我一直在关注 this tutorial,我希望得到相同的结果。我没有像示例中那样手动分配 EventCollection 列表,而是有自己的列表。 如何在EventCollection中填写呢?我已经搜索过,但没有找到任何有用的东西。

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:c ="clr-namespace:Minha_Carteira_Hospitalar.Controls"
         x:Class="Minha_Carteira_Hospitalar.Views.PlanoReceita"
         xmlns:controls="clr-namespace:Xamarin.Plugin.Calendar.Controls;assembly=Xamarin.Plugin.Calendar">

<controls:Calendar
    Events="{Binding Events}"
    >
    <controls:Calendar.EventTemplate>
        <DataTemplate>
            <StackLayout Padding="15,0,0,0">
                <Label
                Text="{Binding Name}"
                FontAttributes="Bold"
                FontSize="Medium" />
               
            </StackLayout>
        </DataTemplate>
    </controls:Calendar.EventTemplate>
</controls:Calendar>

MVVM 代码

 public EventCollection Events;
    public ObservableCollection<Plans> myPlans= new ObservableCollection<Plans>();
    public ObservableCollection<Plans> MyPlans
    {
        get => myPlans;
        set => myPlans= value;
    }
    public MyPlansViewModel()
    {
        Events = new EventCollection();
    }
    public ICommand LoadingMyPlans
    {
        get
        {

            return new Command(async () =>
            {
                try
                {
                    List<Plans> tmp = await App.Database.GetMyPlans();
                    foreach(var item in tmp)
                    {
                        MyPlans.Clear();
                        tmp.ForEach(i => MyPlans.Add(i));

                        Events.Add(item.DatePlan, MyPlans);
                    }
                    
                  
                   
                    
                }
                catch (Exception ex)
                {
                    await Application.Current.MainPage.DisplayAlert("Error", ex.Message, "OK");
                }

            });

        }
    }

我不确定你在哪里使用 LoadingMyPlans。我做一个简单的例子,关于如何将你自己的列表填入EventCollection,供你参考。

和你的一样Xaml。

型号:

  public class Plans
{
    public DateTime dateTime { get; set; }
    public List<Plan> plans { get; set; }
}
public class Plan
{
    public string Name { get; set; }
    public string Desc { get; set; }
}

视图模型:

    public class CalendarViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
    {
        if (EqualityComparer<T>.Default.Equals(storage, value))
        {
            return false;
        }

        storage = value;
        OnPropertyChanged(propertyName);
        return true;
    }
    public EventCollection Events { get; set; }
    public ObservableCollection<Plans> plans { get; set; }

    public CalendarViewModel()
    {
        plans = new ObservableCollection<Plans>()
        {
            new Plans(){ dateTime=DateTime.Now, plans=new List<Plan>() { new Plan() { Name = "Plan_A", Desc = "aaaaa" }, new Plan() { Name = "Plan_A2", Desc = "aaaaa2" } }},
            new Plans(){ dateTime=DateTime.Now.AddDays(5), plans=new List<Plan>() { new Plan() { Name = "Plan_B", Desc = "bbbbb" }, new Plan() { Name = "Plan_B2", Desc = "aaaaa2" } }},
            new Plans(){ dateTime=DateTime.Now.AddDays(-3), plans=new List<Plan>() { new Plan() { Name = "Plan_C", Desc = "ccccc" }}}
        };
        Events = new EventCollection();
        foreach (var item in plans)
        {
            Events.Add(item.dateTime, item.plans);
        }

    }

}

后面的代码:

   public Page2()
    {
        InitializeComponent();
        this.BindingContext = new CalendarViewModel();
    }