Improved shell experience.
This commit is contained in:
@@ -10,7 +10,7 @@ using Wino.Helpers;
|
||||
|
||||
namespace Wino.Calendar.Controls;
|
||||
|
||||
public partial class WinoCalendarView : Control
|
||||
public partial class WinoCalendarView : Control, IDisposable
|
||||
{
|
||||
private const string PART_DayViewItemBorder = nameof(PART_DayViewItemBorder);
|
||||
private const string PART_CalendarView = nameof(PART_CalendarView);
|
||||
@@ -54,6 +54,7 @@ public partial class WinoCalendarView : Control
|
||||
|
||||
|
||||
private CalendarView? CalendarView;
|
||||
private long _displayModeCallbackToken = -1;
|
||||
|
||||
public WinoCalendarView()
|
||||
{
|
||||
@@ -64,6 +65,17 @@ public partial class WinoCalendarView : Control
|
||||
{
|
||||
base.OnApplyTemplate();
|
||||
|
||||
if (CalendarView != null)
|
||||
{
|
||||
CalendarView.SelectedDatesChanged -= InternalCalendarViewSelectionChanged;
|
||||
|
||||
if (_displayModeCallbackToken != -1)
|
||||
{
|
||||
CalendarView.UnregisterPropertyChangedCallback(CalendarView.DisplayModeProperty, _displayModeCallbackToken);
|
||||
_displayModeCallbackToken = -1;
|
||||
}
|
||||
}
|
||||
|
||||
CalendarView = GetTemplateChild(PART_CalendarView) as CalendarView;
|
||||
|
||||
Guard.IsNotNull(CalendarView, nameof(CalendarView));
|
||||
@@ -78,7 +90,7 @@ public partial class WinoCalendarView : Control
|
||||
// Everytime display mode changes, update the visible date range backgrounds.
|
||||
// If users go back from year -> month -> day, we need to update the visible date range backgrounds.
|
||||
|
||||
CalendarView.RegisterPropertyChangedCallback(CalendarView.DisplayModeProperty, (s, e) => UpdateVisibleDateRangeBackgrounds());
|
||||
_displayModeCallbackToken = CalendarView.RegisterPropertyChangedCallback(CalendarView.DisplayModeProperty, (s, e) => UpdateVisibleDateRangeBackgrounds());
|
||||
}
|
||||
|
||||
private void InternalCalendarViewSelectionChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args)
|
||||
@@ -147,4 +159,20 @@ public partial class WinoCalendarView : Control
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (CalendarView == null)
|
||||
return;
|
||||
|
||||
CalendarView.SelectedDatesChanged -= InternalCalendarViewSelectionChanged;
|
||||
|
||||
if (_displayModeCallbackToken != -1)
|
||||
{
|
||||
CalendarView.UnregisterPropertyChangedCallback(CalendarView.DisplayModeProperty, _displayModeCallbackToken);
|
||||
_displayModeCallbackToken = -1;
|
||||
}
|
||||
|
||||
CalendarView = null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user