当前时间显示与连续显示在WPF使用MVVM
本文关键字:显示 WPF 使用 MVVM 时间 连续 | 更新日期: 2023-09-27 18:17:06
我想在我的屏幕上显示当前时间,并使用MVVM模式在WPF屏幕中不断更新。
我在我的视图模型中编写这段代码
// creating a property
private string _currentDateTime;
public string CurrentDateTime
{
get
{
return _currentDateTime;
}
set
{
if (value != _currentDateTime)
{
_currentDateTime = value;
this.RaisePropertyChanged(() => this.CurrentDateTime);
}
}
}
我写了这个方法
public string GetCurrentDateTime()
{
try
{
DispatcherTimer timer = new DispatcherTimer(new TimeSpan(0, 0, 1),
DispatcherPriority.Normal,
delegate
{
this.CurrentDateTime = DateTime.Now.ToString("HH:mm:ss");
},
this.Dispatcher);
return CurrentDateTime;
}
catch
{
return CurrentDateTime;
}
}
我将我的文本块与属性绑定,但它显示异常,因为this.CurrentDateTime
是null
。
有什么建议吗?
我不知道你对RaisePropertyChanged(() => this.CurrentDateTime)
的意图是什么。
如果它是照顾MVVM属性更改通知,那么这段代码应该在你的VM
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
那么你的集合应该是
set
{
if (value != _currentDateTime)
{
_currentDateTime = value;
OnPropertyChanged("CurrentDateTime");
}
}
要持续更新时间,请使用Timer
您可以将间隔设置为1秒,并在每个计时器经过的事件上设置您的CurrentDateTime
CurrentDateTime = DateTime.Now.ToString();
我不知道为什么会出现这个问题,但我实现了相同的功能,但代码略有变化。
我改变了GetCurrentDateTime
方法的try
块中的代码
try
{
DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
dispatcherTimer.Start();
return CurrentDateTime;
}
,我为计时器
添加了一个新方法private void dispatcherTimer_Tick(object sender, EventArgs e)
{
// Updating the Label which displays the current second
this.CurrentDateTime = DateTime.Now.ToString(" HH:mm tt");
// Forcing the CommandManager to raise the RequerySuggested event
CommandManager.InvalidateRequerySuggested();
}
现在正在工作