同时使用silverlight datepicker和timepicker

时间:2010-10-30 14:23:06

标签: silverlight data-binding mvvm

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

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

  • 将日期和时间组件存储在不同的值中(不是那个hacky,而是一点点无聊,因为我要将结果值存储为数据库中的一个字段)
  • 在SelectedDateChanged事件触发时尝试并修复时间组件(这似乎是一个非常糟糕的解决方案)

我希望能够告诉DatePicker控件:只需在更改日期时保留时间组件。我希望得到太多吗?

1 个答案:

答案 0 :(得分:7)

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

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}"/>