请考虑以下问题:
我有一个 Xamarin Forms 项目,使用 ViewModel 和 XAML 绑定(bind)。我有一个特定的 ListView,它绑定(bind)到特定对象的 ObservableCollection。
这些对象包含显示以下按钮列表所需的所有信息:
<ListView ItemsSource="{Binding ListViewItems}" Margin="0,20,0,0" RowHeight="130" SeparatorVisibility="None" VerticalOptions="FillAndExpand" Grid.Column="1" Grid.Row ="0" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Button Command="{Binding HeatClickedCommand}" Margin="5,10,5,10" HorizontalOptions ="FillAndExpand" BackgroundColor="{Binding color_hex}" Grid.Column="1" TextColor="{StaticResource LightTextColor}" FontSize="Medium" Text="{Binding heat_title}"></Button>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
首次加载页面时,colour_hex
设置为绿色、灰色或红色,具体取决于特定的应用状态和有关对象的信息。首次显示列表时,屏幕上适合的所有按钮似乎都能正确显示,但是最后的按钮似乎没有正确显示(最后 4 个应该显示为灰色,在调试中我已回显颜色应该是灰色)。
但是,奇怪的是,如果某些按钮是绿色的,则快速上下滚动似乎会随机更改哪些按钮设置为绿色。
例如,假设按钮 1 和 2 是红色,但 3 是绿色,如果我向下滚动到 15,然后快速返回到顶部,它可能会发生变化,因此 2 现在是绿色,3 是红色。
这似乎只发生在安卓系统(手机和平板电脑)上,但我还没有在足够多的设备上进行测试,还不能得出结论。我只知道 Windows 上不会发生这种情况。
检查调试,发现发生这种情况时,没有任何颜色更改函数或属性更改函数被触发,看起来像是某种内存问题。
对此的任何建议将不胜感激。
最佳答案
查看 ListView.CachingStrategy
属性及其用途。这可能就是造成这种情况的原因。
此设置确定单元格的重用方式。如果设置为错误的值(对于您的用例),可能会导致一些奇怪的行为。
更多信息可以在文档中找到:https://developer.xamarin.com/api/type/Xamarin.Forms.ListViewCachingStrategy/
关于listview - Xamarin ListView 绑定(bind)到 ObservableCollection 随机更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49983049/