У меня есть список объектов, которые я привязываю к ListView и использую DataTemplate для отображения в приложении Xamarin. Пока все довольно просто. Но главное, что я хочу, чтобы один из элементов управления (в частности, метка) постоянно обновлялся.
Пока это то, что у меня есть ...
<ListView x:Name="ItemsListView"
ItemsSource="{Binding Items}"
VerticalOptions="FillAndExpand"
HasUnevenRows="true"
RefreshCommand="{Binding LoadItemsCommand}"
IsPullToRefreshEnabled="true"
IsRefreshing="{Binding IsBusy, Mode=OneWay}"
CachingStrategy="RecycleElement"
ItemSelected="OnItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Padding="10">
<Label Text="{Binding Title}"
LineBreakMode="NoWrap"
Style="{DynamicResource ListItemTextStyle}"
FontSize="16" />
<mycountdown:TimerLabel Text="{Binding TimeRemainingString}"
Style="{DynamicResource ListItemDetailTextStyle}"
FontSize="13" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
И код моего класса TimerLabel ...
public class TimerLabel : Label
{
private bool beating;
public TimerLabel()
{
StartHeartbeat();
}
public void StartHeartbeat()
{
//only start beating again if not currently beating.
if (!beating)
{
beating = true;
Heartbeat();
}
}
public void StopHeartbeat()
{
beating = false;
}
async void Heartbeat()
{
while (beating)
{
this.Text = DateTime.UtcNow.ToLongTimeString();
}
}
}
Это работает , но проблема в том, что сердцебиение для каждого элемента в списке продолжает работать, даже когда я ухожу со страницы.
В идеале, сердцебиение должно выполняться только для элементов, которые видны на экране, но я бы согласился позволить им всем работать и просто отключить их, когда я покидаю страницу.
Проблема в том, что я не могу понять, как получить доступ к методу StopHeartbeat () из кода страницы или модели представления.
Это также не будет ограничено только ярлыками. В итоге у меня будет несколько других элементов управления, которые нужно постоянно обновлять в потоке пользовательского интерфейса, но это самый простой для начала.
Если есть другой способ, которым я должен это делать, скажите, пожалуйста.
Спасибо!