日期选取器 2 路绑定在绑定值开始时为 Null 时不更新



我有一个绑定到 DateTime 对象的 DatePicker 控件:

<DatePicker SelectedDate="{Binding Path=SelectedDocu.StartDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

我有时会先启动SelectedDocu.StartDate,然后再通过 WPF 显示数据。其他时候,它是空的,我希望用户添加日期。

SelectedDocu.StartDate对象已初始化为实际的 DateTime 对象,然后通过 DatePicker 更新时,双向绑定将按预期工作(== 当用户更改日期时它会更新,调用基础资源库,我可以通过断点跟踪该流)。(这是你能想象到的最标准的、普通的 PropertyChanged 设置,我什至不会发布它。

但是,当 DateTime 对象为 null 并且 DatePicker 用于选择日期时,甚至不会调用该对象的资源库。控件显示新选择的日期,但数据绑定不会更新。

我应该补充一点,SelectedDocu.StartDate实际上是 Object 类型;它不是一个类型化的 DateTime 实例。我不希望这是一个问题,因为拆箱在我以这种方式进行数据绑定的其他任何地方都运行良好,包括SelectedDocu.StartDate实例化版本的选择器。

知道发生了什么吗?

更新

使用 Object 存储日期时间确实有效,并且拆箱也正常工作。我确实找到了一种方法来重现这个问题,其中 Object<->DateTime 绑定不起作用,但它是一个跨多个类的半复杂设置,具有 getter/setter。当我找到时间时,我会尝试发布一个可重现的示例 - 无论是在这个问题中还是作为新帖子。目前,我已经找到了解决此问题的方法。

WPF 中的日期选取器的选定日期使用属性

public Nullable<DateTime> SelectedDate { get; set; }

请查看 MSDN - 选定日期属性以获取更多详细信息。

有关更多详细信息,请查看 C# 可为空的日期时间。

希望它能回答你的问题。

请确保 INotifyPropertyChanged 接口已在 DateTime 属性所在的类上实现。还要确保属性的 setter 正确地调用 NotifyPropertyChanged() 方法。请参阅以下链接以了解如何实现该接口:

https://msdn.microsoft.com/en-us/library/ms743695(v=vs.110).aspx

如果这没有帮助,请告诉我。

试试这个同志: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");
}
}

或者尝试使用MVVM将其设置为参数的混合代码隐藏 构造函数类

private ListBox listBox
public MyClassViewModel(ListBox listBox)
{
this.listBox = listBox
}
public void MyMethod(){
DateTime selectedDate = this.listBox.SelectedDate;
}

最新更新