我需要在表单(" dd.MM.yyy")和Time之间组合Date并插入一个日期时间对象:
例: 日期13/10/2017和时间:10:30 - >联合收割机日期结果: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 我该如何解决?
答案 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);