44
55namespace  AuroraControls ; 
66
7- public  partial  class  CalendarPickerHandler  :  DatePickerHandler 
7+ public  partial  class  CalendarPickerHandler  :  DatePickerHandler ,   IDisposable 
88{ 
9+     private  UIBarButtonItem ?  _clearButton ; 
10+     private  UIBarButtonItem ?  _doneButton ; 
11+ 
912    public  static PropertyMapper < CalendarPicker ,  CalendarPickerHandler >  NullableDatePickerPropertyMapper  = 
1013        new ( ViewMapper ) 
1114        { 
@@ -52,21 +55,15 @@ protected override void ConnectHandler(MauiDatePicker platformView)
5255
5356        if  ( platformView . InputAccessoryView  is  UIToolbar  tb ) 
5457        { 
55-             var  clearButton  =  new  UIBarButtonItem ( "Clear" ,  UIBarButtonItemStyle . Plain , 
56-                 ( _ ,  _ )  => 
57-                 { 
58-                     if  ( this . VirtualView  is  not CalendarPicker  el ) 
59-                     { 
60-                         return ; 
61-                     } 
62- 
63-                     el . Unfocus ( ) ; 
64-                     el . Date  =  null ; 
65-                 } ) ; 
66- 
67-             var  items  =  new  List < UIBarButtonItem > ( tb . Items ) ; 
68-             items . Insert ( 0 ,  clearButton ) ; 
69-             tb . Items  =  items . ToArray ( ) ; 
58+             _clearButton  =  new  UIBarButtonItem ( ) ; 
59+             _clearButton . Style  =  UIBarButtonItemStyle . Plain ; 
60+             _clearButton . Title  =  "Clear" ; 
61+             _clearButton . Clicked  +=  ClearButtonOnClicked ; 
62+ 
63+             _doneButton  =  new  UIBarButtonItem ( UIBarButtonSystemItem . Done ) ; 
64+             _doneButton . Clicked  +=  DoneButtonOnClicked ; 
65+ 
66+             tb . Items  =  [ _clearButton ,  new  UIBarButtonItem ( UIBarButtonSystemItem . FlexibleSpace ) ,  _doneButton ] ; 
7067        } 
7168    } 
7269
@@ -77,6 +74,16 @@ protected override void DisconnectHandler(MauiDatePicker platformView)
7774            dp . ValueChanged  -=  OnDatePickerValueChanged ; 
7875        } 
7976
77+         if  ( _clearButton  !=  null ) 
78+         { 
79+             _clearButton . Clicked  -=  ClearButtonOnClicked ; 
80+         } 
81+ 
82+         if  ( _doneButton  !=  null ) 
83+         { 
84+             _doneButton . Clicked  -=  DoneButtonOnClicked ; 
85+         } 
86+ 
8087        base . DisconnectHandler ( platformView ) ; 
8188    } 
8289
@@ -95,7 +102,35 @@ private void OnDatePickerValueChanged(object sender, EventArgs e)
95102        } 
96103    } 
97104
98-     public  void  TryShowEmptyState ( ) 
105+     private  void  DoneButtonOnClicked ( object ?  sender ,  EventArgs  e ) 
106+     { 
107+         if  ( 
108+             this . PlatformView ? . InputView ? . Subviews . FirstOrDefault ( )  is  not UIDatePicker  datePicker  || 
109+             this . VirtualView  is  not CalendarPicker  calendarPicker  || 
110+             calendarPicker . UpdateMode  !=  CalendarPickerUpdateMode . WhenDone ) 
111+         { 
112+             return ; 
113+         } 
114+ 
115+         calendarPicker . Date  =  datePicker . Date . ToDateTime ( ) ; 
116+ 
117+         this . TryShowEmptyState ( ) ; 
118+ 
119+         this . PlatformView . ResignFirstResponder ( ) ; 
120+     } 
121+ 
122+     private  void  ClearButtonOnClicked ( object ?  sender ,  EventArgs  e ) 
123+     { 
124+         if  ( this . VirtualView  is  not CalendarPicker  el ) 
125+         { 
126+             return ; 
127+         } 
128+ 
129+         el . Unfocus ( ) ; 
130+         el . Date  =  null ; 
131+     } 
132+ 
133+     private  void  TryShowEmptyState ( ) 
99134    { 
100135        if  ( this . VirtualView  is  not CalendarPicker  el ) 
101136        { 
@@ -111,4 +146,23 @@ public void TryShowEmptyState()
111146                        :  string . Empty ; 
112147            } ) ; 
113148    } 
149+ 
150+     protected  virtual  void  Dispose ( bool  disposing ) 
151+     { 
152+         if  ( ! disposing ) 
153+         { 
154+             return ; 
155+         } 
156+ 
157+         _clearButton ? . Dispose ( ) ; 
158+         _doneButton ? . Dispose ( ) ; 
159+     } 
160+ 
161+     public  void  Dispose ( ) 
162+     { 
163+         Dispose ( true ) ; 
164+         GC . SuppressFinalize ( this ) ; 
165+     } 
166+ 
167+     ~ CalendarPickerHandler ( )  =>  Dispose ( false ) ; 
114168} 
0 commit comments