【Wpf】TimePicker绑定Value获取到的值未按指定格式转换

项目场景:

自己写一个类继承TimePicker(管理 NuGit程序包,选择Extended WPF Toolkit 安装),初始化时,设置
Format = DateTimeFormat.Custom;
FormatString = “H:mm”;
CultureInfo tmpCultureInfo = CultureInfo.GetCultureInfo(“en-us”);
在XAML中Value值绑定ReactiveProperty < string > TimeStr

问题描述

获取到的TimeStr值未按初始化设置的内容返回,而是一个完整的时间,且当系统时间设置为德国等时间表现形式为21.08中间为点时,TimeStr的订阅中取到的值也是 XXXX.XX.XX XX.XX例如:2022.04.24 21.08

原因分析:

该控件Value的类型为DateTime类型,因此在 TimeStr.Subscribe(x =>{…});中,x的类型由DateTime类型自动根据系统设置的时间时区转换为String类型。与设置给控件的Format等参数无关。

解决方案:

①将TimeStr的类型改为DateTime类型,使用时用字符串拼接方式,例:
$“{TimeStr.Value.Hour}:{TimeStr.Value.Minute}”
②或将绑定到Value改为绑定到Text,这样可以直接获取到控件按设置格式转换后的值

其中定义Format,FormatString的类(该类重写了转换函数,因此可将Format设置于Value和Text上)继承于定义Value的类,定义Value的类继承于定义Text,CultureInfo 的类,其中一个值改变时,另一个值将根据设置的格式被赋值。

遗留问题:

在string类型的TimeStr绑定Value时,取TimeStr.Value时,其格式固定为en-us,其值未按系统设置的时间时区转换,也和控件设置的格式无关,不知是否时ReactiveProperty绑定后强制转换时,这个类固定转换成了en-us格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值