当前时间显示与连续显示在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.CurrentDateTimenull

有什么建议吗?

当前时间显示与连续显示在WPF使用MVVM

我不知道你对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();
}

现在正在工作