Closed. This question is not reproducible or was caused by typos。它当前不接受答案。












想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

7年前关闭。



Improve this question




我正在构建一个使用简单MVVM体系结构和EF的WPF应用程序。

我看到一个奇怪的问题,如果尝试设置datetime属性,则会收到System.StackOverflowException。如果未设置datetime属性,则不会获得异常。

捆绑:
   <DatePicker Style="{StaticResource Dp}"
               Grid.Column="1"
               SelectedDate="{Binding Date, UpdateSourceTrigger=PropertyChanged}" />

公共(public)属性(property):
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类的私有(private)实例。 CriticalDate是EF根据我的数据库架构创建的类。它本身不是DateTime

最后更新

我仍然不知道出什么问题了...我将有问题的部分(包括装订)撕下并从头重写。不知道我做了什么不同的事情,但是现在可以了。我认为这与项目控件的设置有关……如果我有更多的时间(愚蠢的截止日期),我会回头看看它是什么,但是现在这仍然是个谜。

感谢您分享我的困惑,如果只是短暂的话。

最佳答案

尝试删除OnPropertyChanged("Date");,或将绑定(bind)模式更改为OneWayToSource

来自documentation of UpdateSourceTrigger



我相信OnPropertyChanged("Date");方法上的Date_set正在更新UI,而UI又会再次调用Date_set方法,从而完成了循环并导致了递归。

10-06 09:23