100% MVVM
public class DateTimeConverter : IValueConverter
{
private DateTime _target = DateTime.Now;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var source = value as DateTime?;
if (source is null) return null;
_target = source.Value;
switch (parameter as string)
{
case "y": return source.Value.Year;
case "m": return source.Value.Month;
case "d": return source.Value.Day;
case "h": return source.Value.Hour;
case "i": return source.Value.Minute;
default: return null;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
switch (parameter as string)
{
case "y": return new DateTime(System.Convert.ToInt32(value), _target.Month, _target.Day, _target.Hour, _target.Minute, 0);
case "m": return new DateTime(_target.Year, System.Convert.ToInt32(value), _target.Day, _target.Hour, _target.Minute, 0);
case "d": return new DateTime(_target.Year, _target.Month, System.Convert.ToInt32(value), _target.Hour, _target.Minute, 0);
case "h": return new DateTime(_target.Year, _target.Month, _target.Day, System.Convert.ToInt32(value), _target.Minute, 0);
case "i": return new DateTime(_target.Year, _target.Month, _target.Day, _target.Hour, System.Convert.ToInt32(value), 0);
default: return _target;
}
}
}