WinRT TimePicker绑定属性值不显示,始终选中0:00问题求助
问题核心原因
WinRT/WinUI 体系下 TimePicker 控件的 Time 属性要求绑定的是 TimeSpan 类型,代表「自当日午夜以来的时间长度」,你当前绑定的是格式化后的字符串,XAML 绑定逻辑无法识别自定义格式的时间字符串,所以赋值失效,控件默认显示0:00,不属于控件bug。
修复方案
- 调整ViewModel属性定义,将原字符串类型的
SystemTime改为TimeSpan类型,无需自行做时间格式化:
TimeSpan SystemTime() const { return m_systemTime; } void SystemTime(TimeSpan value) { __super::SetProperty(m_systemTime, value, L"SystemTime"); }
- 赋值时直接使用你提供的午夜时长获取方法,不需要经过
DateTimeFormatter处理:
SystemTime(duration_since_midnight());
- 原有XAML代码不需要调整,你已经配置的
ClockIdentifier="24HourClock"会自动让控件按24小时制展示时间,符合需求。
如果确实有业务场景需要保留字符串类型的属性存储,可以额外实现IValueConverter接口,在转换器中完成自定义时间字符串到TimeSpan的双向转换,不过该方案会增加冗余逻辑,优先推荐直接调整属性类型的方案。
内容的提问来源于stack exchange,提问作者sohel14_cse_ju
相关产品推荐
相关产品推荐

