同时使用silverlight datepicker和timepicker

Rob*_*ert 1 data-binding silverlight mvvm

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

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

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

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

Vla*_*hov 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

XAML:

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

<input:TimePicker Value="{Binding Date, Mode=TwoWay}"/>
Run Code Online (Sandbox Code Playgroud)