我正在使用工具包中的Silverlight DatePicker和TimePicker来允许用户选择日期和时间。它们绑定在场景后面的业务对象上的相同DateTime值。这通常可以正常工作,除非更改日期组件时擦除时间组件。这有点合乎逻辑,但可能不是用户想要的行为。
我有几种方法可以解决这个问题:
我希望能够告诉DatePicker控件:只需在更改日期时保留时间组件。我希望得到太多吗?
答案 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}"/>