【发布时间】:2014-01-16 20:22:21
【问题描述】:
我正在构建一个使用简单 MVVM 架构和 EF 的 WPF 应用程序。
我看到一个奇怪的问题,如果我尝试设置日期时间属性,我会得到一个System.StackOverflowException。如果我不设置 datetime 属性,我不会得到异常。
绑定:
<DatePicker Style="{StaticResource Dp}"
Grid.Column="1"
SelectedDate="{Binding Date, UpdateSourceTrigger=PropertyChanged}" />
公共财产:
public DateTime Date
{
get
{
return _criticalDate.Date;
}
set
{
if (_criticalDate != null && value != null && _criticalDate.Date == value)
return;
_criticalDate.Date = value;
OnPropertyChanged("Date");
}
}
尝试使用调试器单步执行似乎行不通。我已经查看了所有内容,试图了解发生了什么......关于可能导致这种情况的任何提示?
这是CriticalDate 类的定义,
public partial class CriticalDate
{
public int ID { get; set; }
public System.DateTime Date { get; set; }
public string CriticalReason { get; set; }
public int FileID { get; set; }
}
_criticalDate 字段是CriticalDate 类的私有实例。 CriticalDate 是 EF 从我的 DB 架构中创建的一个类。它本身不是DateTime。
最终更新
我仍然不知道出了什么问题...我撕掉了有问题的部分(包括装订)并从头开始重写。不知道我做了什么不同的事情,但现在可以了。我认为这与项目控制的设置方式有关......如果我有更多时间(愚蠢的截止日期),我会回去看看它是什么,但现在它是一个谜。
感谢您分享我的困惑,如果只是这么简单的话。
【问题讨论】:
-
添加
if (_criticalDate == this) throw new Exception("Bug"); -
StackOverflowException 在哪个函数上?顺便说一句,当 _criticalDate 为空时,我希望出现 NullReferenceException ...
-
_criticalDate的类型是什么?你能发布实现吗? -
您可能需要在抛出异常后查看堆栈(为此在 DEBUG 上运行应用程序)。方法的名称应该提供一些线索...
-
If I don't set the datetime property, I don't get the exception.- 你在哪里设置??
标签: c#