Могу ли я вставить дату DateTimePicker и текстовое поле «Время» в DateTime? - PullRequest
3 голосов
/ 14 февраля 2012

У меня есть группа компонентов вроде:

<StackPanel Orientation="Horizontal" >
    <Label>Between</Label>
    <DatePicker Name="dtpFrom" ></DatePicker>
    <TextBox Name="timeFrom" MinWidth="60" />
    <Label>and</Label>
    <DatePicker Name="dtpTo"></DatePicker>
    <TextBox Name="timeTo"
               MinWidth="60" />
</StackPanel>

, где пользователь может выбрать дату и установить дату и время «От», а также дату и время «До».

Я хочу объединить их (часть даты DatePicker с соответствующей частью времени, представленной в TextBox) в значение DateTime. например, с:

DateTime dtFrom;

... Я хочу иметь возможность сделать что-то вроде (псевдокод):

dtFrom = (DateTime) dtpFrom.Date + Convert.ToTime(timeFrom);

Есть ли способ сделать это?

1 Ответ

5 голосов
/ 14 февраля 2012

Я бы порекомендовал обработать это в вашем DataContext (т.е. ViewModel) и связать с двумя отдельными свойствами.Они могут легко отображаться на базовый DateTime.

Например:

// In ViewModel
private DateTime dateTime;

public DateTime Date
{
    get { return dateTime.Date; }
    set
    {
        if (value != dateTime.Date)
        {
            dateTime = value.Date + dateTime.TimeOfDay;
            RaisePropertyChanged("Date");
        }
    }
}

public TimeSpan Time
{
    get { return dateTime.TimeOfDay; }
    set
    {
        if (value != dateTime.TimeOfDay)
        {
            dateTime = dateTime.Date + value;
            RaisePropertyChanged("Time");
        }
    }
}

Это позволит вам привязать каждый элемент управления к соответствующему свойству, но при этом поддерживать все в пределах одного * 1007.* экземпляр.

...