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.
Connected.Components/Utilities/BindingConverters/DateConverter.cs

91 lines
2.2 KiB

2 years ago
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;
}
}
}
}