2010-10-30 53 views
1

我使用工具包中的Silverlight DatePicker和TimePicker一起允许用户选择日期和时间。它们在场景后面的业务对象上绑定到相同的DateTime值。这大多数工作正常,除了日期组件被改变时间组件被擦除。这有点合乎逻辑,但可能不是用户想要的行为。一起使用silverlight datepicker和timepicker

有一对夫妇的方式,我可以破解我的办法解决这:

  • 存放在不同的值的日期和时间组件(不是哈克但我要存储所产生的价值有点anonying如在一个数据库字段)
  • 尝试并解决了时间组件当SelectedDateChanged事件触发(这似乎很哈克溶液)

我希望能够告诉DatePicker控件:只是在更改日期时留下时间部分。我是否希望太多?

回答

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

谢谢,我可能最终会包裹他们入一个DateTimePicker控制,有几个地方我使用它们在一起。这个控件可能会使用你建议的转换。 – Robert 2010-11-02 05:46:35

+0

如何实现这个{StaticResource dateConverter}}?请放一些代码。谢谢!和+1 – 2012-04-03 20:31:43