【问题标题】:Caliburn.Micro Binding DateTimeOffset to DatePickerCaliburn.Micro 将 DateTimeOffset 绑定到 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”上工作。”。你有什么想法吗?

标签: c# wpf mvvm datepicker caliburn.micro


【解决方案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?以及如何添加空值?
猜你喜欢
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 2014-07-15
  • 2016-03-19
  • 1970-01-01
  • 2021-10-18
相关资源
最近更新 更多