首页 > 解决方案 > 桌面应用的日期时间格式与 Win10 的兼容性

问题描述

我有一个 WPF 应用程序,并且正在使用 MVVM 框架。在我的视图模型中,我有一个日期时间设置器,它检查变量的值是否已更改,如果是,则将新值设置为变量。

我的问题是,如果每次进入设置器时日期时间的值都不正确。

例如:日期时间值为 2019 年 1 月 11 日

初始设定值等于 2019 年 1 月 11 日,但在随后的运行中变为 2019 年 11 月 1 日 - 下一次运行返回到 2019 年 1 月 11 日,依此类推。

因此,由于 setter 函数中的无限循环而导致 StackMemoryException。

我尝试添加一个 if 语句来检查 id 旧值和新值是否相同,但问题是 setter 的值总是从一月到十一月切换。

我尝试将日期解析为相同的日期格式。

public DateTime? ActionDate
{
    get { return actionDate; }
    set
    {
       if (value.HasValue && !actionDate.HasValue)
       {
            actionDate = value;
            OnPropertyChanged("ActionDate");
       }
       else if (value.HasValue && actionDate.HasValue && actionDate.Value.Date.ToString("MM/dd/yyyy") != value.Value.Date.ToString("MM/dd/yyyy"))
        {
            actionDate = value;
            OnPropertyChanged("ActionDate");
         }
      }
}

我还尝试在使用 Windows 7 操作系统的机器上运行该应用程序,它运行良好。任何建议都会有所帮助。

谢谢

编辑:我已经解决了这个问题。问题是我的 xaml 中的 Datepicker 标记。我将模型值绑定到 Date Picker 的 SelectedDate 和 Text 属性,这就是为什么 setter 被调用两次并且设置了不正确的日期的原因。我只是从 xaml 文件中的 Datepicker 中删除文本绑定。

谢谢

标签: c#wpfdatetime

解决方案


我认为您显示的显示格式需要更正。至于设置值,如果值与之前的设置值不同。你可以使用这个逻辑: -

public DateTime? ActionDate
    {
    get { return actionDate; }
    set
    {
    if (value.HasValue && value.CompareTo(actionDate)!=0)
        actionDate = value;
   OnPropertyChanged("ActionDate");
    } 

推荐阅读