你好,我正试图进行事件倒计时,但遇到了一些问题。
此函数被调用:
private void RunEventCountdowns()
{
Device.StartTimer(new TimeSpan(0, 0, 1), () =>
{
if (isCounting)
{
Device.BeginInvokeOnMainThread(() =>
{
OnPropertyChanged("propChanged");
});
return true;
}
else
{
return false;
}
});
}
isCounting在OnAppearing((中设置为true
然后:
public event PropertyChangedEventHandler propChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = propChanged;
foreach (var evt in EventList)
{
tSpan = evt.Date - DateTime.Now;
evt.Time = tSpan;
System.Diagnostics.Debug.WriteLine(evt.Name + " is this far away: " + evt.Time.ToString());
}
}
Tspan只是一个Timespan
前端的绑定进行到一半——name属性看起来很好,但倒计时字符串永远不会更新。如果我将itemsource设置为null,然后将其更改回我的observablecollection源,它会更新。。但后来我的记忆力不断增强,这似乎不是正确的方法。
我的调试几乎显示了我希望在前端看到的信息。我在这里做错了什么?
在第一条注释的帮助下,我在模型上添加了一个带有PropertyChanged的setter,从而解决了这个问题。
public TimeSpan Time { get { return time; } set { time = value; OnPropertyChanged("Time"); } }
以及以下事件:
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}