在WPF窗口中显示时间

时间:2016-05-07 16:17:33

标签: c# .net wpf

我正在创建一个WPF应用,我想要一个名为SystemTimeLabel的标签来显示时间。时间,如时间。我希望它显示当前时间,而不仅仅是显示它的加载时间。 (所以,就像,你可以看到数字时钟滴答。)我认为while语句会起作用,但我意识到它不会。有什么想法吗?

2 个答案:

答案 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动画来实现,但计时器感觉就像是一个更自然的解决方案。