当绑定值以Null

时间:2017-03-08 06:58:26

标签: c# wpf data-binding datepicker

我有一个绑定到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。当我找到时间时,我会尝试发布一个可重现的例子 - 无论是在这个问题还是作为一个新帖子。目前,我已找到解决问题的方法。

4 个答案:

答案 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;

}