我有一个WPF应用程序,并且正在使用MVVM框架。 在我的视图模型中,我有一个日期时间设置器,用于检查变量的值是否已更改,如果是,则将新值设置为变量。
我的问题是,每次进入设置器时,日期时间的值是否正确?
例如:日期时间值为2019年1月11日
初始设定值等于2019年1月11日,但在随后的运行中它变为2019年11月1日-在下一次运行中返回2019年1月11日,依此类推。
由于setter函数中的无限循环,因此导致StackMemoryException。
我尝试添加if语句来检查id的旧值和新值是否相同,但是问题是setter的值始终从1月切换到11月。
我尝试将日期解析为相同的日期格式。
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 OS的计算机上运行该应用程序,并且可以正常运行。任何建议都会有所帮助。
谢谢
答案 0 :(得分:0)
我认为您的问题来自您的字符串格式。
https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings
//For the date January 11, 2019,
actionDate.Value.Date.ToString("MM/dd/yyyy")
this will return November 1, 2019.
dd => day
MM => month
yyyy => year
HH => hour (24 hours)
hh => hour (12 hours)
mm => minute
ss => second
here is an exemple for January 11, 2019
//you can use
actionDate.Value.Date.ToString("dd/MM/yyyy");
//or
string.Format("{0:dd-MM-yyyy}", actionDate.Value.Date); // => 11-01-2019
答案 1 :(得分:0)
我认为您所显示的显示格式需要更正。 至于设置值,如果值与先前设置的值不同。您可以使用以下逻辑:-
public DateTime? ActionDate
{
get { return actionDate; }
set
{
if (value.HasValue && value.CompareTo(actionDate)!=0)
actionDate = value;
OnPropertyChanged("ActionDate");
}