Datetimepicker数据绑定自定义类型

时间:2019-11-13 10:34:53

标签: c# winforms data-binding datetimepicker

当前,我有一个自定义的日期类,用于存储年份和年份:

public class CustomDate
{
    public short Day { get; set; }

    public short Year { get; set; }

    public CustomDate(short day, short year)
    {
        this.Day = day;
        this.Year = year;
    }
}

这可以在课堂上使用:

public class Foo
{
    public int Id { get; set; }

    public CustomDate MyDate { get; set; }
}

到目前为止一切都很好。现在,如果要将其绑定到winform datetimetimepicker控件,我将执行以下操作:

    private void BuildDob()
    {
        var bind = new Binding("Value", this._foo, "MyDate", true, DataSourceUpdateMode.OnPropertyChanged);
        bind.Parse += (s, e) =>
            {
                e.Value = new CustomDate(
                    day: (short)((DateTime)e.Value).DayOfYear,
                    year: (short)((DateTime)e.Value).Year);
            };
        this.dtPickerDateOfBirth.DataBindings.Add(bind);

根据解析的日期和在对象上正确设置的日期,此方法可以正常工作。我面临的问题是,加载表单时datetimepicker不会显示/设置为正确的绑定日期,它会将自身设置为01/01/1900,我猜这是因为我试图绑定到CustomDate类型不能绑定到datetimepicker。

我必须绑定到正确的属性但在加载时设置正确的日期的哪些解决方案?

1 个答案:

答案 0 :(得分:0)

我相信您可以创建一个隐式运算符,将CustomDate类型转换为DateTime,反之亦然:

public class CustomDate
{
    public int Day { get; set; }

    public int Year { get; set; }

    public CustomDate(int day, int year)
    {
        this.Day = day;
        this.Year = year;
    }

    public override string ToString()
    {
        return Year + "/" + Day;
    }

    public static implicit operator CustomDate(DateTime _dt) => new CustomDate(_dt.DayOfYear, _dt.Year);
    public static implicit operator DateTime(CustomDate _dt) => new DateTime(_dt.Year,1,1).AddDays(_dt.Day-1);


}

“天”和“年”属性是整数而不是短裤,我不明白为什么要更改它...

https://dotnetfiddle.net/wa9eji