我正在创建一个WPF应用,我想要一个名为SystemTimeLabel
的标签来显示时间。时间,如时间。我希望它显示当前时间,而不仅仅是显示它的加载时间。 (所以,就像,你可以看到数字时钟滴答。)我认为while
语句会起作用,但我意识到它不会。有什么想法吗?
答案 0 :(得分:3)
如果你想遵循MVVM模式,日期时间的主要问题是它没有实现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" />
答案 1 :(得分:2)
当然 - 您只需要定期更新标签,这可以通过DispatcherTimer
轻松完成。只需定期注册一个事件 - 比如说每秒10次 - 并在每次事件发生时用系统时间更新标签。
(请注意,您不希望每秒只执行一次此操作,即使您实际上每秒只会更改一次文本,或者您最终可能会产生奇怪的效果由于计时器没有每秒一次完全,因此偶尔会暂停两秒钟。)
可能这可以通过WPF动画来实现,但计时器感觉就像是一个更自然的解决方案。