如何组合日期和时间WPF

时间:2017-10-13 09:35:27

标签: c# wpf

我需要在表单(" dd.MM.yyy")和Time之间组合Date并插入一个日期时间对象:

例: 日期13/10/2017和时间:10:3​​0 - >联合收割机日期结果:13/10/2017 10:30

XAML:

       //DATE ("dd.MM.yyy")
  <DatePicker  HorizontalAlignment="Center"  
        Validation.ErrorTemplate="{StaticResource TextBoxErrorTemplate}"         
        SelectedDate="{Binding DeliveryDate, Mode=TwoWay,  UpdateSourceTrigger=PropertyChanged ,NotifyOnValidationError=True ,TargetNullValue=''}"/>


        //TIME 
   <TextBox  Validation.ErrorTemplate="{StaticResource TextBoxErrorTemplate}"  >
                <TextBox.Text >
                    <Binding Path="Time" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True" Mode="TwoWay" >
                        <Binding.ValidationRules>
                            <local:DateTimeValidationRule ValidationStep="RawProposedValue"/>
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>

视图模型:

    public DateTime DeliveryDate;
    private TimeSpan time;
    public TimeSpan Time
    {
        get { return time; }
        set
        {
            time = value;
            OnPropertyChanged("Time");
        }
    }


     public DateViewModel()
    {   saveDate = new RelayCommand<string>(SaveDateFunction);
        DeliveryDate = DateTime.Now.Date ;

      }

    public void SaveDateFunction(string obj)          
     {
      DateTime combined = DeliveryDate.Add(Time);
     }

我有错误结果:13/10/2017 00:00:00 我该如何解决?

2 个答案:

答案 0 :(得分:0)

未设置时间但未获得NullReferenceException,因为TimeSpan是一种结构且具有默认值而非null

由于您需要转换器,因此未将值从UI传递到您的属性。我确信您可以在输出窗口中看到错误。

public class StringToTimeSpanConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        //Your code here
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

DeliveryDate是一个字段,而不是属性,所以它的绑定也不起作用。

答案 1 :(得分:0)

为SaveDateFunction方法尝试以下签名

public void SaveDateFunction(string obj)          
{
   DateTime combined = DeliveryDate.AddMilliseconds(Time.TotalMilliseconds);
}

可以尝试工作示例here

DateTime d=DateTime.Now.Date;
TimeSpan t = DateTime.Now.TimeOfDay;
DateTime combined = d.AddMilliseconds(t.TotalMilliseconds);