listview - Xamarin ListView 绑定(bind)到 ObservableCollection 随机更改

标签 listview xamarin xamarin.forms observablecollection inotifypropertychanged

请考虑以下问题:

我有一个 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/

相关文章:

WPF listview 删除生成的额外列

java - 从 ListView 中获取选定的项目 |复选框列表单元格

c# - WPF MVVM : Access a listview object from View Model

Xamarin 示例项目未在 Visual Studio 中加载

facebook - Xamarin.Android 可以使用哪个 facebook SDK?

xcode - IOS MasterDetail Universal Project 如何添加登录?

ios - Xamarin.iOS 应用程序在 Testflight 上的 iOS13 上启动时崩溃

Xamarin,如何为项目中的图像文件名生成常量?

c# - Xamarin Forms App 链接使用参数

android - Android ListView 的自定义字体