我可以将DateTimePicker日期和文本框"时间"塞进日期时间吗?

B. *_*non 3 c# wpf datetime wpf-controls

我有一组这样的组件:

<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>
Run Code Online (Sandbox Code Playgroud)

用户可以选择日期并设置"发件人"日期和时间以及"收件人"日期和时间.

我想将这些(DatePicker的日期部分与TextBox中表示的相应时间部分)组合成DateTime值.例如,用:

DateTime dtFrom;
Run Code Online (Sandbox Code Playgroud)

...我希望能够做类似(伪代码)的事情:

dtFrom = (DateTime) dtpFrom.Date + Convert.ToTime(timeFrom);
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

Ree*_*sey 5

我建议在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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将允许您将每个控件绑定到适当的属性,但仍然在一个DateTime实例中维护所有内容.