我正在创建一个WPF应用程序,我想让一个名为SystemTimeLabel
的标签显示时间。 时间,就是时间。 我希望它显示当前时间,而不仅仅是加载时的时间。(因此,您可以看到数字时钟滴答声。)我认为while
语句会有用,但我意识到它不会。 有什么想法?
我正在创建一个WPF应用程序,我想让一个名为SystemTimeLabel
的标签显示时间。 时间,就是时间。 我希望它显示当前时间,而不仅仅是加载时的时间。(因此,您可以看到数字时钟滴答声。)我认为while
语句会有用,但我意识到它不会。 有什么想法?
如果您想遵循MVVM模式,datetime的主要问题在于它没有实现INotifyPropertyChanged接口。因此,尽管您可以将datetime属性绑定到标签上,但它不会自动更新。因此,您只需要在ViewModel中为datetime属性实现更新通知。创建一个具有更改通知的公共属性,并启动一个定时器以每半秒左右更新该属性。然后将标签的内容绑定到该属性。
public class MyViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private DateTime _now;
public MyViewModel()
{
_now = DateTime.Now;
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(500);
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
public DateTime CurrentDateTime
{
get {return _now;}
private set
{
_now = value;
PropertyChanged(this, new PropertyChangedEventArgs("CurrentDateTime"));
}
}
void timer_Tick(object sender, EventArgs e)
{
CurrentDateTime = DateTime.Now;
}
}
<Label x:Name="SomeLabel" Content="{Binding CurrentDateTime}" ContentStringFormat="yyyy-MM-dd HH:mm:ss" />
.Tick
事件。 - Geoff JamesDispatcherTimer
轻松完成。 只需注册一个事件以每秒10次的频率触发,并在每次事件触发时使用系统时间更新标签。DispatchTimer
是如何工作的吗?你还能告诉我Visual Studio的引用名称吗?因为VS告诉我没有这样的东西。 - Aravind Suresh Thakidayil private DateTime _currentTime;
private Timer _timer = new Timer(1000);
public DateTime CurrentTime
{
get { return _currentTime; }
set {
if (object.Equals(_currentTime , value)) return;
_currentTime = value;
PropertyChanged(this, new PropertyChangedEventArgs(_currentTime)) }
}
public MainWindowViewModel()
{
CurrentTime = DateTime.Now;
_timer.Elapsed += (s, e) => CurrentTime = DateTime.Now.ToLocalTime();
_timer.Start();
}