c# - 桌面应用的日期时间格式与 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 中删除文本绑定。
谢谢
解决方案
我认为您显示的显示格式需要更正。至于设置值,如果值与之前的设置值不同。你可以使用这个逻辑: -
public DateTime? ActionDate
{
get { return actionDate; }
set
{
if (value.HasValue && value.CompareTo(actionDate)!=0)
actionDate = value;
OnPropertyChanged("ActionDate");
}
推荐阅读
- odbc - 在 TransactionScope 内执行 OdbcConnection 但避免自动登记
- c# - 从键盘钩子c#获取进程名称
- javascript - 计算输入的值并将结果设置在另一个字段中
- html - 尽管在相应的输入通道中有 0,我如何防止 feComposite 算术 svgfilters 更改输出通道值
- amazon-web-services - AWS S3 存储桶不一致
- javascript - 是否可以在 wordpress 中编辑所有已发送电子邮件的消息正文
- laravel - 在提供者 laravel 中绑定抽象类服务
- python - Azure Databricks:如何过滤数据框中不包含类似运算符的列?
- node.js - 仅返回 1 个查找文档,但我请求 3 个 ID 来查找节点/快递
- html - ngx-owl-carousel 单个项目的情况,它占据所有宽度