gpt4 book ai didi

c# - 在wpf中显示剩余时间

转载 作者:太空宇宙 更新时间:2023-11-03 12:34:58 25 4
gpt4 key购买 nike

我想在我的应用程序中显示一个倒数计时器,显示到某个 NodaTime.Instant 的持续时间。为此,我有以下设计:

public class Event
{
private Instant EventStartTime;
public Duration TimeLeft { get { return EventStartTime - SystemClock.Instance.Now; } }
}

但是当我现在在我的 View 中这样显示它时:

<Label Content="{Binding Event.TimeLeft}" />

这不会动态更新。我知道启动计时器以连续触发 PropertyChangedEvents 的解决方案,但在这种情况下这似乎有点矫枉过正。

是否有一种简洁的方式始终向用户显示正确的时间?

最佳答案

只要您希望更新 Label,就需要为 TimeLeft 属性引发 PropertyChanged 事件。这需要 Event 类实现 INotifyPropertyChanged 事件。

另一种选择是使用 BindingExpression 显式更新绑定(bind)。然后,您可以使用 DispatcherTimer 每 x 秒调用一次 BindingExpression 的 UpdateTarget() 方法:

public MainWindow()
{
InitializeComponent();

System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += (s, e) =>
{
var be = theLabel.GetBindingExpression(Label.ContentProperty);
if (be != null)
be.UpdateTarget();
};
timer.Start();
}

<Label x:Name="theLabel" Content="{Binding Event.TimeLeft}" />

没有更干净的方法来刷新 WPF 中的数据绑定(bind)。

关于c# - 在wpf中显示剩余时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41415425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com