using System; namespace Connected { /// /// A ready made DateTime? to string binding converter with configurable date format and culture /// public class NullableDateConverter : ToStringConverter { public string DateFormat { get; set; } public NullableDateConverter(string format = "yyyy-MM-dd") { DateFormat = format; } protected override string? ConvertValue(DateTime? value) { return OnSet(value); } protected override DateTime? ConvertValueBack(string? value) { return OnGet(value); } private DateTime? OnGet(string arg) { try { return DateTime.ParseExact(arg, DateFormat, Culture); } catch (FormatException e) { TriggerError(e.Message); return null; } } private string OnSet(DateTime? arg) { if (arg == null) return null; try { return arg.Value.ToString(DateFormat, Culture); } catch (FormatException e) { TriggerError(e.Message); return null; } } } /// /// A ready made DateTime to string binding converter with configurable date format and culture /// public class DateConverter : ToStringConverter { public string DateFormat { get; set; } = "yyyy-MM-dd"; public DateConverter(string format) { DateFormat = format; } protected override string? ConvertValue(DateTime value) { return OnSet(value); } protected override DateTime ConvertValueBack(string value) { return OnGet(value); } private DateTime OnGet(string arg) { try { return DateTime.ParseExact(arg, DateFormat, Culture); } catch (FormatException e) { TriggerError(e.Message); return default; } } private string OnSet(DateTime arg) { try { return arg.ToString(DateFormat, Culture); } catch (FormatException e) { TriggerError(e.Message); return null; } } } }