【问题标题】:Using silverlight datepicker and timepicker together一起使用 silverlight datepicker 和 timepicker
【发布时间】:2011-05-02 19:49:52
【问题描述】:

我将工具包中的 Silverlight DatePicker 和 TimePicker 一起使用,以允许用户选择日期和时间。它们在幕后绑定到业务对象上的相同 DateTime 值。这通常可以正常工作,除非更改日期组件时会擦除时间组件。这有点合乎逻辑,但可能不是用户想要的行为。

有几种方法可以解决这个问题:

  • 将日期和时间组件存储在不同的值中(不是那么老套,但有点麻烦,因为我要将结果值作为一个字段存储在 db 中)
  • 在 SelectedDateChanged 事件触发时尝试修复时间组件(这似乎是一个非常老套的解决方案)

我希望能够告诉 DatePicker 控件:更改日期时只需保留时间组件即可。我是不是希望太大了?

【问题讨论】:

    标签: silverlight data-binding mvvm


    【解决方案1】:

    我认为,您可以使用转换器说 DatePicker “更改日期时只需保留时间部分” :)。当您将 DateTime 绑定到 DatePicker 时,转换器存储值,并且在 ConvertBack 上返回而不更改时间部分。

    public class DateConverter : IValueConverter
    {
        private DateTime _original;
    
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            _original = (DateTime)value;
            return value;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            DateTime date = ((DateTime) value);
            return new DateTime(date.Year, date.Month, date.Day, _original.Hour, _original.Minute, _original.Second);
        }
    }
    

    XAML:

    <sdk:DatePicker SelectedDate="{Binding Date, Mode=TwoWay, 
                    Converter={StaticResource dateConverter}}" />
    
    <input:TimePicker Value="{Binding Date, Mode=TwoWay}"/>
    

    【讨论】:

    • 谢谢,我最终可能会将它们包装到 DateTimePicker 控件中,因为我在多个地方一起使用它们。此控件可能会使用您建议的转换。
    • 如何实现这个{StaticResource dateConverter}}?请放一些代码。谢谢!和 +1
    猜你喜欢
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多