C# 如何将DateTime.Now绑定到TextBlock?

C# 如何将DateTime.Now绑定到TextBlock?,c#,windows-8,windows-runtime,C#,Windows 8,Windows Runtime,在我的Windows 8应用程序中,我想在TextBlock元素中显示当前时间。时间值应每秒更新一次。下面的代码工作得很好,但我认为这并不是理想的解决方案。那么,有没有更好的方法 public class Clock : Common.BindableBase { private string _time; public string Time { get { return _time; } set { SetProperty<string&

在我的Windows 8应用程序中,我想在TextBlock元素中显示当前时间。时间值应每秒更新一次。下面的代码工作得很好,但我认为这并不是理想的解决方案。那么,有没有更好的方法

public class Clock : Common.BindableBase {
    private string _time;
    public string Time {
        get { return _time; }
        set { SetProperty<string>(ref _time, value); }
    }
}

private void startPeriodicTimer() {
    if (PeriodicTimer == null) {
        TimeSpan period = TimeSpan.FromSeconds(1);

        PeriodicTimer = ThreadPoolTimer.CreatePeriodicTimer((source) => {

            Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                () => {
                    DateTime time = DateTime.Now;
                    clock.Time = string.Format("{0:HH:mm:ss tt}", time);
                    [...]
                });

        }, period);
    }
}
你可以用定时器

var timer = new Timer { Interval = 1000 };
timer.Elapsed += (sender, args) => NotifyPropertyChanged("Now");
timer.Start();
并每秒通知一个属性

public DateTime Now
{
    get { return DateTime.Now; }
}
你可以用定时器

var timer = new Timer { Interval = 1000 };
timer.Elapsed += (sender, args) => NotifyPropertyChanged("Now");
timer.Start();
并每秒通知一个属性

public DateTime Now
{
    get { return DateTime.Now; }
}

我是如何在我的应用程序中使用计时器的

        private void dispatcherTimer_Tick(object sender, EventArgs e)
        {
            TxtHour.Text = DateTime.Now.ToString("HH:mm:ss");
        }
private void MainWindow_OnLoad(object sender, RoutedEventArgs e)
        {
            System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
            dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
            dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
            dispatcherTimer.Start();
            TxtDate.Text = DateTime.Now.Date.ToShortDateString();
        }

我是如何在我的应用程序中使用计时器的

        private void dispatcherTimer_Tick(object sender, EventArgs e)
        {
            TxtHour.Text = DateTime.Now.ToString("HH:mm:ss");
        }
private void MainWindow_OnLoad(object sender, RoutedEventArgs e)
        {
            System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
            dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
            dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
            dispatcherTimer.Start();
            TxtDate.Text = DateTime.Now.Date.ToShortDateString();
        }

WinRT具有
Dispatchermer
类。你可以用它

XAML


WinRT具有
Dispatchermer
类。你可以用它

XAML


你应该更频繁地投票。如果你每秒钟做一次,你可能会发现时钟似乎在断断续续或跳跃。由于时钟精度和cpu定时问题,“每秒一次”不能保证以精确的1秒间隔运行。两个方向的距离可能都有几毫秒。因此,设置一个500毫秒的值,它会更平滑。你应该更频繁地投票。如果你每秒钟做一次,你可能会发现时钟似乎在断断续续或跳跃。由于时钟精度和cpu定时问题,“每秒一次”不能保证以精确的1秒间隔运行。两个方向的距离可能都有几毫秒。因此,设置一个500毫秒的值,它将更加平滑。