87 lines
2.5 KiB
C#
87 lines
2.5 KiB
C#
using System;
|
|
using Xamarin.Forms;
|
|
|
|
namespace Bit.App.Controls
|
|
{
|
|
public class ExtendedDatePicker : DatePicker
|
|
{
|
|
private string _format;
|
|
|
|
public static readonly BindableProperty PlaceHolderProperty = BindableProperty.Create(
|
|
nameof(PlaceHolder), typeof(string), typeof(ExtendedDatePicker));
|
|
|
|
public string PlaceHolder
|
|
{
|
|
get { return (string)GetValue(PlaceHolderProperty); }
|
|
set { SetValue(PlaceHolderProperty, value); }
|
|
}
|
|
|
|
public static readonly BindableProperty NullableDateProperty = BindableProperty.Create(
|
|
nameof(NullableDate), typeof(DateTime?), typeof(ExtendedDatePicker));
|
|
|
|
public DateTime? NullableDate
|
|
{
|
|
get { return (DateTime?)GetValue(NullableDateProperty); }
|
|
set
|
|
{
|
|
SetValue(NullableDateProperty, value);
|
|
UpdateDate();
|
|
}
|
|
}
|
|
|
|
private void UpdateDate()
|
|
{
|
|
if (NullableDate.HasValue)
|
|
{
|
|
if (_format != null)
|
|
{
|
|
Format = _format;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Format = PlaceHolder;
|
|
}
|
|
}
|
|
|
|
protected override void OnBindingContextChanged()
|
|
{
|
|
base.OnBindingContextChanged();
|
|
if (BindingContext != null)
|
|
{
|
|
_format = Format;
|
|
UpdateDate();
|
|
}
|
|
}
|
|
|
|
protected override void OnPropertyChanged(string propertyName = null)
|
|
{
|
|
base.OnPropertyChanged(propertyName);
|
|
|
|
if (propertyName == DateProperty.PropertyName || (propertyName == IsFocusedProperty.PropertyName &&
|
|
!IsFocused && (Date.ToString("d") ==
|
|
DateTime.Now.ToString("d"))))
|
|
{
|
|
NullableDate = Date;
|
|
UpdateDate();
|
|
}
|
|
|
|
if (propertyName == NullableDateProperty.PropertyName)
|
|
{
|
|
if (NullableDate.HasValue)
|
|
{
|
|
Date = NullableDate.Value;
|
|
if (Date.ToString(_format) == DateTime.Now.ToString(_format))
|
|
{
|
|
UpdateDate();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
UpdateDate();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|