我有一个绑定到DateTime对象的DatePicker控件:
<DatePicker SelectedDate="{Binding Path=SelectedDocu.StartDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
我有时会在通过WPF显示数据之前启动SelectedDocu.StartDate
数据。其他时候,它是null,我希望用户添加日期。
当 SelectedDocu.StartDate
对象已初始化为实际的DateTime对象,然后通过DatePicker更新时,双向绑定按预期工作(==当用户更改日期时,它会更新,调用基础setter,我可以通过断点跟踪该流程)。 (这是你可以想象的最标准,普通的PropertyChanged设置,我甚至不会发布它。)
但是当DateTime对象为null并且DatePicker用于选择日期时,甚至不会调用该对象的setter。控件显示新选择的日期,但数据绑定不会更新。
我应该补充说SelectedDocu.StartDate
实际上是Object类型;它不是类型化的DateTime实例。我并不认为这是一个问题,因为拆箱工作在其他任何地方我都在以这种方式进行数据绑定,包括实例化SelectedDocu.StartDate
版本的选择器。
知道发生了什么事吗?
使用Object存储DateTime确实有效,并且拆箱也能正常工作。我确实找到了一种方法来重现这个问题,其中Object&lt; - &gt; DateTime绑定没有工作,但它是一个跨多个类的半复杂设置,带有getter / setter。当我找到时间时,我会尝试发布一个可重现的例子 - 无论是在这个问题还是作为一个新帖子。目前,我已找到解决问题的方法。
答案 0 :(得分:0)
请确保已在DateTime属性所在的类上实现了INotifyPropertyChanged接口。还要确保属性的setter正确调用NotifyPropertyChanged()方法。请参阅以下链接以了解如何实现界面:
https://msdn.microsoft.com/en-us/library/ms743695(v=vs.110).aspx
如果这没有用,请告诉我。
答案 1 :(得分:0)
来自WPF的DateDicker的selectedDate使用属性
public Nullable<DateTime> SelectedDate { get; set; }
请查看MSDN - SelectedDate property了解详情。
查看C# Nullable Datetime了解更多详情。
希望它能回答你的问题。
答案 2 :(得分:0)
试试这个同志:D
public DateTime DateStarted
{
get
{
//SET
if (this.EmployeeJobAssignments == null)
this.EmployeeJobAssignments = new EmployeeJobAssignments();
return this.EmployeeJobAssignments.DateStarted;
}
set { this.EmployeeJobAssignments.DateStarted = value;
base.RaisePropertyChanged("DateStarted");
}
}
答案 3 :(得分:0)
或尝试将此混合代码与MVVM一起设置在参数上 构造函数类
private ListBox listBox
public MyClassViewModel(ListBox listBox)
{
this.listBox = listBox
}
public void MyMethod(){
DateTime selectedDate = this.listBox.SelectedDate;
}