2010-10-30 77 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