Caliburn.Micro 将 DateTimeOffset 绑定到 DatePicker
Posted
技术标签:
【中文标题】Caliburn.Micro 将 DateTimeOffset 绑定到 DatePicker【英文标题】:Caliburn.Micro Binding DateTimeOffset to DatePicker 【发布时间】:2015-11-05 06:55:07 【问题描述】:我需要将 DateTimeOffset
属性绑定到 WPF DatePicker,因为 Odata 不支持 DateTime
。
我知道如何绑定DateTime
属性。
我尝试将DateTimeOffset
属性绑定到DatePicker,就像绑定DateTime
属性一样。
但价值根本没有改变。它始终具有默认值。
我该如何解决这个问题?
【问题讨论】:
使用DataTimeOffset.DateTime
属性转换为DateTime
。正如您已经知道如何绑定它,可能比弄清楚如何绑定DateTimeOffset
更快。
感谢 Jack,保存记录时可以使用。但是我在检索记录时遇到了错误。 “TwoWay 或 OneWayToSource 绑定无法在“System.DateTimeOffset”类型的只读属性“DateTime”上工作。”。你有什么想法吗?
【参考方案1】:
尝试使用此值转换器。
public class DateTimeToDateTimeOffsetConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
DateTimeOffset dto = (DateTimeOffset)value;
return dto.DateTime;
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
DateTime date = (DateTime)value;
return new DateTimeOffset(date);
我基于此解决方案:http://bretstateham.com/binding-to-the-new-xaml-datepicker-and-timepicker-controls-to-the-same-datetime-value/
【讨论】:
这很好用,虽然名字倒了。它应该是 DateTimeOffsetToDateTimeConverter。 另外,为了处理空值,将第一行更改为 DateTimeOffset ? dto = (DateTimeOffset?) 值;并在转换回添加到开头 if (value == null) return null;【参考方案2】:按照 Jack 的建议将其转换为 DateTime。为避免您在评论中描述的错误,请将 BindingMode 设置为 OneWay "Binding Path=MyProperty, Mode=OneWay"
【讨论】:
我同意,但添加绑定 Mode=OneWay 只会设置从数据源到 UI 元素的值。 UI Element (DatePicker) 中所做的更改不会反映在 DataSource 中,对吗?如何更改 DatePicker 中的日期并将其保存回 DB?以及如何添加空值?以上是关于Caliburn.Micro 将 DateTimeOffset 绑定到 DatePicker的主要内容,如果未能解决你的问题,请参考以下文章
如何将 ValueConverter 应用于基于约定的 Caliburn.Micro 绑定示例?
caliburn.micro 在 Release 目录中生成的文件
Caliburn.Micro 无法匹配来自不同程序集的 View 和 ViewModel