Listview的CachingStrategy="RetainElement"

  • 2019 年 11 月 20 日
  • 筆記

ListView的 CachingStrategy 缓存策略有3种模式。

RecycleElement  1  指示不需要的单元格的绑定上下文将更新至所需单元格的绑定上下文。  RecycleElementAndDataTemplate   3  指示数据模板类型不仅缓存 RecycleElement 指定的行为,也缓存 DataTemplateSelector 所选择的 DataTemplate 对象。  RetainElement   0  指示对于列表视图 ItemsSource 属性中的每个项目,都将通过 DataTemplate 构造一个唯一元素。

因为我的listview绑定了好几组不同数据来回切换,有时候感觉项目的状态残留着上一组的状态。没有完全清空。没有耐心查找,我的代码问题了。就查了下CachingStrategy 缓存策略。原来用的是 RecycleElement ,我改成了RetainElement,之后这种残留就没有了。应该是xamarin内部问题?

                                <ListView HorizontalOptions="Start" ItemsSource="{Binding Records}" VerticalOptions="End"                                                        HasUnevenRows="true"                                                          CachingStrategy="RetainElement"                                                        SeparatorVisibility ="Default"                                                        BindingContextChanged="runstatus1_change"                                                                SelectionMode="None"                                                       >                                              <ListView.ItemTemplate >                                                  <DataTemplate>                                                        <ViewCell>                                                          <StackLayout HeightRequest="30" IsClippedToBounds="{Binding show}" Padding="10,2,10,2" Orientation="Horizontal" HorizontalOptions="FillAndExpand">                                                              <StackLayout  Orientation="Horizontal" >                                                                  <Label TextColor="White" Text="{Binding Title}" LineBreakMode="NoWrap" Style="{DynamicResource ListItemTextStyle}" />                                                                  <Label TextColor="White"  Text=":" LineBreakMode="NoWrap" Style="{DynamicResource ListItemDetailTextStyle}" />                                                              </StackLayout>                                                              <StackLayout Orientation="Horizontal" HorizontalOptions="EndAndExpand"  VerticalOptions="End" >                                                                  <Label TextColor="White"  Text="{Binding value}" LineBreakMode="NoWrap" Style="{DynamicResource ListItemTextStyle}" />                                                                  <Label TextColor="White"  Text="{Binding dw}" LineBreakMode="NoWrap" Style="{DynamicResource ListItemTextStyle}" />                                                              </StackLayout>                                                          </StackLayout>                                                      </ViewCell>                                                  </DataTemplate>                                              </ListView.ItemTemplate>                                          </ListView>