无法从列表中获取日期并在 CalendarView 中以编程方式设置 SelectedDates

Unable to get Date from List and set SelectedDates programmaticaly in CalendarView

我有一个 Table 看起来像这样:

class Calendar
{
    [SQLite.Net.Attributes.PrimaryKey, SQLite.Net.Attributes.AutoIncrement]
    public int Id { get; set; }
    public string PersonId { get; set; }
    public string PlaceId { get; set; }
    public string Date {get; set;}

    public Calendar()
    {

    }
    public Calendar(string personId, string placeId, string date)
    {
        PersonId = personId;
        PlaceId = placeId;
        Date = date;
    }
}

我还有一个日历视图:

            <CalendarView NumberOfWeeksInView="6" SelectedDatesChanged="MyCalendarView_DateChanged" x:Name="MyCalendarView" DisplayMode="Month" SelectionMode="Multiple"/>

我想做的是根据 Table 中的数据获取 CalendarView 标记 SelectedDates。我希望它 select 对应于存储在 Calendar Table 中的 Date 的日期。

比方说,我希望 CalendarView select 所有对应于 PersonId == "James" 和 PlaceId == "Tokyo".

的日期

这是我目前的情况:

private void VerifyButton_Click(object sender, RoutedEventArgs e)
    {

        ReadAllCalendarList dbcalendar = new ReadAllCalendarList();
        DB_CalendarList = dbcalendar.GetAllCalendar();
        var calendarQuery = DB_CalendarList.Where(
        Calendar => Calendar.PersonId == PersonSelector.SelectedItem.ToString() &&
        Calendar.PlaceId == SelectedPlaceName.Text.Trim());

(the ListView below actually shows all records that match the query above, so the query works)

        LstViewCalendar.ItemsSource = (calendarQuery.OrderByDescending(i => i.Id).ToList());

现在,如果我把这段代码放在这里只是为了测试:

MyCalendarView.SelectedDates.Add(DateTimeOffset.Now);

IT WORKS. and the CalendarView selects the todays date.

所以我继续代码如下:

        List<Calendar> calendarRecords = new List<Calendar>();
        //something wrong with foreach below or List above
        foreach (var date in calendarRecords)
        {

            MyCalendarView.SelectedDates.Add(DateTimeOffset.Parse(date.Date));
            MyCalendarView.SelectedDates.Add(DateTimeOffset.Now);
        }

    }

和 NONE 上面 foreach 中的两个语句有效。 上面的列表没有排序,它列出了 table 中的所有记录。我正在以这种方式对其进行测试,但它不起作用。 此外,这是我将记录添加到 Calendar Table:

的方法
for (int i = 0; i <= MyCalendarView.SelectedDates.Count - 1; i++)
            {
                Db_Helper.InsertCal(new Calendar(
                Convert.ToString(PersonSelector.SelectedItem),          
                (SelectedPlaceName.Text.Trim()),                                                             
                MyCalendarView.SelectedDates[i].ToString("dd-MM-yyyy")
                ));
            }

有什么帮助吗? 基本上我放在 foreach 里面的任何东西都不起作用。我在遍历日历 class 记录时做错了但不知道是什么。

好的,我已经整理好了。

基本上,列表是空的。 我已将我的查询分配给这样的列表:

List<Calendar> calendarRecords = new List<Calendar>();
calendarRecords = calendarQuery.ToList();

和:

MyCalendarView.SelectedDates.Add((date.Date));

有效。 但是我必须做出另一个改变: 在 Calendar class 中,我已将 string Date 更改为 DateTimeOffset Date

通过这种方式,我成功地使用我的 SQLite 数据库中包含的数据在 CalendarView 中以编程方式选择了日期。