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的主要内容,如果未能解决你的问题,请参考以下文章