You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.2 KiB
91 lines
2.2 KiB
using System;
|
|
|
|
namespace Connected
|
|
{
|
|
|
|
/// <summary>
|
|
/// A ready made DateTime? to string binding converter with configurable date format and culture
|
|
/// </summary>
|
|
public class NullableDateConverter : Converter<DateTime?>
|
|
{
|
|
public string DateFormat { get; set; }
|
|
|
|
public NullableDateConverter(string format = "yyyy-MM-dd")
|
|
{
|
|
DateFormat = format;
|
|
SetFunc = OnSet;
|
|
GetFunc = OnGet;
|
|
}
|
|
|
|
private DateTime? OnGet(string arg)
|
|
{
|
|
try
|
|
{
|
|
return DateTime.ParseExact(arg, DateFormat, Culture);
|
|
}
|
|
catch (FormatException e)
|
|
{
|
|
UpdateGetError(e.Message);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private string OnSet(DateTime? arg)
|
|
{
|
|
if (arg == null)
|
|
return null;
|
|
try
|
|
{
|
|
return arg.Value.ToString(DateFormat, Culture);
|
|
}
|
|
catch (FormatException e)
|
|
{
|
|
UpdateSetError(e.Message);
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// A ready made DateTime to string binding converter with configurable date format and culture
|
|
/// </summary>
|
|
public class DateConverter : Converter<DateTime>
|
|
{
|
|
public string DateFormat { get; set; } = "yyyy-MM-dd";
|
|
|
|
public DateConverter(string format)
|
|
{
|
|
DateFormat = format;
|
|
SetFunc = OnSet;
|
|
GetFunc = OnGet;
|
|
}
|
|
|
|
private DateTime OnGet(string arg)
|
|
{
|
|
try
|
|
{
|
|
return DateTime.ParseExact(arg, DateFormat, Culture);
|
|
}
|
|
catch (FormatException e)
|
|
{
|
|
UpdateGetError(e.Message);
|
|
return default;
|
|
}
|
|
}
|
|
|
|
private string OnSet(DateTime arg)
|
|
{
|
|
try
|
|
{
|
|
return arg.ToString(DateFormat, Culture);
|
|
}
|
|
catch (FormatException e)
|
|
{
|
|
UpdateSetError(e.Message);
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|