我正在使用通用Windows平臺構建Windows Phone 10應用程序。在我的應用程序中,我有一個標準的CalendarView,我想在有日期的日期顯示密度顏色。這個想法是在頁面加載後立即加載日曆,發出API請求,並在成功的數據檢索後讓CalendarView刷新它的UI,以便調用CalendarViewDayItemChanging
事件。從那裏我可以設置我的密度顏色的細胞有事件。UWP CalendarView更新命令
我幾乎一切正常,除了一部分。當日歷第一次加載時,我將它的最小/最大日期範圍設置爲當前月份,這樣我們一次只能看到一個月。這會導致日曆的UI按預期進行刷新。但是,如果我嘗試再次將最小/最大日期範圍設置爲相同日期,那麼API請求完成後,日曆不會刷新其UI。由於這個原因,我無法強制CalendarView刷新它的UI。我已經嘗試重置最小/最大日期範圍,並且我試圖將日曆的DataContext綁定到我的代碼中的ObservableCollection,後者在我的數據更新時更新。這些都不起作用,我沒有看到任何方法來更新用戶界面。
我對UWP很新,所以我不確定自己做錯了什麼。我知道數據綁定的概念是UWP的重要組成部分,但我不確定如何將數據綁定到此CalendarView,以便在刷新數據時刷新數據。有什麼建議麼?
下面是我的代碼現在的快速摘錄。
XAML
<CalendarView
Name="Calendar"
NumberOfWeeksInView="6"
CalendarViewDayItemChanging="CalendarView_DayItemChanging"
DataContext="{Binding CalendarDates}">
</CalendarView>
代碼隱藏
namespace Pages
{
public sealed partial class CalendarPage : BasePage
{
#region Private Variables
private CalendarPageModel PageModel = new CalendarPageModel();
private ObservableCollection<DateTime> CalendarDates;
#endregion
#region Constructor
public CalendarPage()
{
this.InitializeComponent();
CalendarDates = new ObservableCollection<DateTime>();
}
#endregion
#region Events
private void Page_Loaded(object sender, RoutedEventArgs args)
{
SetCalendarDateRange(); //NOTE: This is done here so that my UI consistantly shows the correct dates on the screen
LoadData();
}
private void CalendarView_DayItemChanging(CalendarView sender, CalendarViewDayItemChangingEventArgs args)
{
if (!PageModel.DateHasEvent(args.Item.Date))
{
args.Item.SetDensityColors(null);
}
else
{
List<Color> colors = new List<Color>();
Color? color = Application.Current.Resources["CalendarHasEventDensityColor"] as Color?;
if (color != null)
{
colors.Add((Color)color);
}
args.Item.SetDensityColors(colors);
}
}
#endregion
#region Data
private void SetCalendarDateRange()
{
Calendar.MinDate = PageModel.StartDate;
Calendar.MaxDate = PageModel.EndDate;
}
private async void LoadData()
{
// get data
await PageModel.RefreshData(PageModel.StartDate, PageModel.EndDate);
// force calendar to update
//NOTE: This only works if the date range is actually different than what it's currently set to
SetCalendarDateRange();
//NOTE: I have tried to just manually add a date to my observable collection to see if it'll kick off the calendar refresh, but it doesn't
CalendarDates.add(DateTime.Now);
}
#endregion
}
}
當您更改MinDate和MaxDate但您沒有完整的repro(其中'CalendarPageModel'?),因此在您的代碼中無法看到問題出在哪裏時,可以讓日曆更新UI。 'RefreshData'發生了什麼?還有什麼叫「LoadData」? –
這些都不重要。它被抽象出來,因爲我唯一的問題是如何在不更改最小/最大日期的情況下更新日曆。您可以假設loadData和refreshData調用獲取數據並將數據存儲到CalendarPageModel類中。此時此數據未連接到CalendarView。如果您願意,我可以刪除該代碼。無論如何,問題是你如何刷新CalendarView,意味着調用上面概述的導師,而不改變最小/最大日期? –
對不起,Ruppe的。在手機上輸入這個。 –