不断更新ListView模板中的标签

时间:2019-01-06 20:55:29

标签: c# xaml xamarin xamarin.forms xamarin.android

我有一个绑定到ListView并使用DataTemplate在Xamarin应用程序中显示的对象的列表。到目前为止,非常简单。但是最重​​要的是,我希望其中一个控件(特别是标签)能够不断更新。

到目前为止,这就是我所拥有的...

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>
<div class="row m-0">
  <div id="aboutus" class="col-12 col-lg-6">
    <div class="container">
      <h2 style="color: white;">About Us</h2>
      <a class="small" href="#home" style="color: white;">Home</a>
      <i style="color: white;" class="fa fa-angle-right"></i>
    </div>
  </div>
  <div class="col-12 col-lg-6">
    <img class="img-fluid w-100" src="https://picsum.photos/946/381" alt="">
  </div>
</div>

<div class="container">
  <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. 
     Dignissimos cupiditate ut nobis unde ipsa eius commodi, 
     praesentium eum. Natus, laborum illo est dolorem rem quos 
     ui ipsum nemo fuga. Odio, aut. Esse veniam quia corporis 
     dolor vitae totam.</p>
</div>

还有TimerLabel类的代码...

    <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>

有效,但是问题是,即使我离开页面,列表中每个项目的心跳仍然保持运行。

理想情况下,心跳仅对屏幕上可见的项目运行,但我会决定让它们全部运行,并在离开页面时将其禁用。

问题是我不知道如何从页面后面的代码或视图模型访问StopHeartbeat()方法。

也不限于标签。我最终将需要在UI线程中不断更新其他一些控件,但这是最简单的控件。

如果还有另一种方法我应该这样做,请这样说。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您在ListItem Source中绑定了 List ,请将其从 List 更改为 ObservableCollection ,它将有效,如果有任何问题或疑问,请通知我您也可以上传viewModel代码

答案 1 :(得分:0)

我的帖子中的最高评论得到了答案。