Xamarin ListView 绑定到 ObservableCollection 随机变化

Xamarin ListView bound to ObservableCollection changing at random

请考虑以下问题:

我有一个 Xamarin Forms 项目,使用 ViewModels 和 XAML 绑定。我有一个绑定到特定对象的 ObservableCollection 的特定 ListView。

对象包含显示以下按钮列表所需的所有信息:

<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红色.

这似乎只发生在机器人(phone 和平板电脑)上,但我还没有在足够多的设备上测试过它,所以还不能得出结论。我只知道 Windows.

不会发生这种情况

检查调试,当发生这种情况时,none 的颜色更改函数或属性更改函数正在触发,看起来像是某种内存问题。

如有任何建议,我们将不胜感激。

看看 ListView.CachingStrategy 属性 及其作用。这可能是造成这种情况的原因。

此设置决定如何重复使用单元格。如果设置为错误的值(对于您的用例),它可能会导致一些奇怪的行为。

可以在文档中找到更多信息:https://developer.xamarin.com/api/type/Xamarin.Forms.ListViewCachingStrategy/