Listview 带有缓存策略回收元素的Xamarin.Forms列表视图不会刷新可见元素

Listview 带有缓存策略回收元素的Xamarin.Forms列表视图不会刷新可见元素,listview,xamarin,xamarin.forms,Listview,Xamarin,Xamarin.forms,我在Xamarin.Forms中有一个项目,其中包含绑定到ObservableCollection的listView listView包含单元格,每个单元格都有一个标签和一个开关。我在列表上方有两个按钮:全选&全选。这些按钮应相应地切换所有开关,并有望更新开关的UI状态:全选应在所有开关打开时刷新我的listView,取消全选应在所有开关关闭时刷新我的listView 我在该列表上还设置了一个缓存策略来回收元素 有趣的是:当我点击“全选”或“取消全选”按钮时,屏幕上可见的listView的上部不

我在Xamarin.Forms中有一个项目,其中包含绑定到ObservableCollection的listView

listView包含单元格,每个单元格都有一个标签和一个开关。我在列表上方有两个按钮:全选&全选。这些按钮应相应地切换所有开关,并有望更新开关的UI状态:全选应在所有开关打开时刷新我的listView,取消全选应在所有开关关闭时刷新我的listView

我在该列表上还设置了一个缓存策略来回收元素

有趣的是:当我点击“全选”或“取消全选”按钮时,屏幕上可见的listView的上部不会刷新,但当我向下滚动listView时,新生成的单元格会更新,因为它们是新的,这是由于缓存策略。另外,当我向上滚动时,旧单元格也会刷新,因为它们是循环使用的

如何在不滚动的情况下刷新listView中的开关状态


非常感谢。

如果你不是安卓,那么我的答案可能与你无关。 我们在Xamarin中遇到了完全相同的问题。带有文本列表视图的表单和Android上的开关,结果发现存在一个已知的Android错误,其中列表视图没有刷新,我们最终实现了解决方法。抱歉,我没有找到最初找到此答案的url,因为我没有找到它

                <x:Arguments>
                <ListViewCachingStrategy>
                    <OnPlatform x:TypeArguments="ListViewCachingStrategy" iOS="RecycleElement" Android="RetainElement"/>
                </ListViewCachingStrategy>
            </x:Arguments>

解决办法是关闭Android上的缓存,我认为该漏洞只适用于最新版本的Android操作系统,但我们没有费心区分。

感谢您的回答,但问题出现在两个平台上。我已尝试禁用Recycle元素,但列表仍不刷新且速度较慢:/。我找到了一个解决方法,禁用了Recycle元素,并使用此方法在我自己的ObservaleCollection扩展类上刷新列表。public void addandremovitemt item{this.Items.Additem;this.OnCollectionChangednew NotifyCollectionChangedEventArgsNotifyCollectionChangedAction.Reset;this.Items.Removeitem;this.OnCollectionChangednew NotifyCollectionChangedEventArgsNotifyCollectionChangedAction.Reset;}