关于WPF DatePicker的绑定

7 篇文章 0 订阅

WPF DatePicker控件非常有意思,当页面只有一个DatePicker时,绑定很正常,其Text显示为“选择日期”,属性“DisplayDate”也默认为今天,你是绑定“Text"属性也可以,绑定“SelectedDate”属性也可以,但“Text"属性应显式为 Mode=TwoWay。当页面有多个DatePicker控件时,只有最后一个控件正常,前面的“Text"属性则显示为“0001/1/1”,或者是你初始化的值,这就很头疼,如果不需要初始化值,那么就麻烦了。当“Text"属性值为string.Empty时,则显示为“选择日期”,那么就能利用这个特性编写程序,需要一个string和DateTime之间转换。另外其属性“DisplayDate”也麻烦,它的值会跟随前面一条数据的“SelectedDate”属性值,除非你重新设定它。

所以会有这样的现象,页面多个 DatePicker控件,只有最后一个还算正常,前面几个显示为“0001/1/1”,且点选后也是从0001年1月那个面板值,用户点选实在太麻烦了,除非直接输入日期,那么就失去了这个控件的意义。

解决方法:

一、绑定的数据属性为string,并初始化为string.Empty;

二、绑定DatePicker控件的“Text"属性,显式为 Mode=TwoWay;

三、编写string和DateTime之间转换程序,如Convert.ToDateTime()和ToShortDateString();

四、与数据库的连接,一个办法需要两个数据类,一个是直接连接数据库的类,与数据库表字段的数据类型一致;另一个是ViewModel类的操作类,如是DateTime的则改为string的,然后是两个类之间的转换,容易,就是麻烦点。一个办法就是直接转换。

五、新建一条数据时,应显式设定“DisplayDate”的属性值,一般为DateTime.Today

六、这里就有一个问题,string.Empty不能转换为DateTime,为此,我是设定日期“0001/1/1”就是空值,转换程序如下:

        public DateTime StringToDatetime(string sdate)
        {
            return sdate == string.Empty ? Convert.ToDateTime("0001/1/1") : Convert.ToDateTime(sdate);
        }
        public string DatetimeToString(DateTime sdate)
        {
            return sdate == Convert.ToDateTime("0001/1/1") ? string.Empty : sdate.ToShortDateString();
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落单枫叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值