我正在构建一个使用简单MVVM架构和EF的WPF应用程序.
我看到一个奇怪的问题,如果我尝试设置一个datetime属性,我得到一个System.StackOverflowException.如果我没有设置datetime属性,我不会得到异常.
捆绑:
<DatePicker Style="{StaticResource Dp}"
Grid.Column="1"
SelectedDate="{Binding Date, UpdateSourceTrigger=PropertyChanged}" />
Run Code Online (Sandbox Code Playgroud)
公共财产:
public DateTime Date
{
get
{
return _criticalDate.Date;
}
set
{
if (_criticalDate != null && value != null && _criticalDate.Date == value)
return;
_criticalDate.Date = value;
OnPropertyChanged("Date");
}
}
Run Code Online (Sandbox Code Playgroud)
尝试使用调试器逐步执行它似乎不起作用.我已经看过所有试图看到发生了什么的事情......有什么迹象表明可能导致这种情况发生了什么?
这是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; }
}
Run Code Online (Sandbox Code Playgroud)
该_criticalDate字段是CriticalDate该类的私有实例.CriticalDate是EF从我的数据库模式创建的类.它本身不是一个DateTime.
最终更新
我仍然不知道出了什么问题......我撕掉了有问题的部分(包括绑定)并从头开始重写.不知道我做了什么不同,但它现在有效.我认为这与物品控制的设置方式有关...如果我有更多的时间(愚蠢的截止日期),我会回去看看它是什么,但现在这是一个谜.
感谢您分享我的困惑,如果只是如此简短.
尝试删除OnPropertyChanged("Date");,或将绑定模式更改为OneWayToSource。
TwoWay 或 OneWayToSource 的绑定侦听目标属性中的更改并将它们传播回源。这称为更新源。通常,只要目标属性发生更改,就会发生这些更新。这对于复选框和其他简单控件来说很好,但通常不适合文本字段。每次击键后进行更新会降低性能,并且会剥夺用户在提交新值之前退格和修复键入错误的通常机会。因此,Text 属性的默认 UpdateSourceTrigger 值为 LostFocus 而不是 PropertyChanged。
我相信OnPropertyChanged("Date");该Date_set方法正在更新 UI,这又会再次调用该Date_set方法,从而完成循环并导致递归。
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |