0
点赞
收藏
分享

微信扫一扫

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

天际孤狼 2022-04-24 阅读 45
wpf

项目场景:

自己写一个类继承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格式

举报

相关推荐

0 条评论