Я сделал пользовательский TimePicker для формата 24H, особенно в iOS.
Однако моя проблема в Android Renderer.
На моей странице есть два TimePicker, и когда я обновляю значение в одном из них, я также должен суммировать это значение с другим временем выбора.
ANDROID RENDERER
public class CustomTimePickerRenderer : ViewRenderer<TimePicker, Android.Widget.EditText>, TimePickerDialog.IOnTimeSetListener, IJavaObject, IDisposable
{
TimePickerDialog dialog;
public CustomTimePickerRenderer(Context context) : base(context)
{
}
Context CurrentContext => Plugin.CurrentActivity.CrossCurrentActivity.Current.Activity;
IElementController ElementController => Element as IElementController;
protected override void OnElementChanged(ElementChangedEventArgs<TimePicker> e)
{
base.OnElementChanged(e);
SetNativeControl(new Android.Widget.EditText(CurrentContext));
if (Control != null)
{
Control.Click += Control_Click;
Control.FocusChange += Control_FocusChange;
this.Control.KeyListener = null;
DateTime d = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
if (Element != null && !Element.Time.Equals(default(TimeSpan)))
Control.Text = Element.Time.ToString(@"hh\:mm");
else
Control.Text = d.ToString("HH:mm");
}
}
void Control_FocusChange(object sender, FocusChangeEventArgs e)
{
if (e.HasFocus)
{
ShowTimePicker();
ElementController.SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, true);
}
else
{
ElementController.SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, false);
}
}
void Control_Click(object sender, EventArgs e)
{
ShowTimePicker();
}
void ShowTimePicker()
{
if (dialog == null)
dialog = new TimePickerDialog(CurrentContext, this, Element.Time.Hours, Element.Time.Minutes, true);
dialog.UpdateTime(Element.Time.Hours, Element.Time.Minutes);
dialog.Show();
}
public void OnTimeSet(Android.Widget.TimePicker view, int hourOfDay, int minute)
{
var time = new TimeSpan(hourOfDay, minute, 0);
Element.SetValue(TimePicker.TimeProperty, time);
Control.Text = time.ToString(@"hh\:mm");
ClearFocus();
}
}
XAML
<local:CustomTimePicker x:Name="TempoAttesa" Unfocused="AggiornaDurata" Format="HH:mm"/>
<local:CustomTimePicker x:Name="Durata" Time="{Binding Durata, Mode=TwoWay}" Format="HH:mm"/>
C #
private void AggiornaDurata(object sender, EventArgs e)
{
Durata.Time += TempoAttesa.Time;
}
Метод AggiornaDurata просто суммирует время одного TimePicker со временем другого TimePicker.
Значение Durata.Time обновлено, но текст не отображается.
Итак, я что-то забыл в рендерере?