2017-04-05 91 views
0

我在Xamarin.Forms中有一個項目,其中包含一個綁定到ObservableCollection的listView。Xamarin.Forms緩存策略列表視圖recycle元素不會刷新可見元素

listView包含單元格,每個單元格都有一個標籤和一個開關。我在該列表上方有兩個按鈕:全選&取消選擇全部。這些按鈕應該相應地切換所有的開關(並希望更新開關的UI狀態):選擇所有應刷新我的listView與所有開關打開和取消選擇所有應刷新我的listView與所有開關關閉。

我還在該列表中設置了「回收元素」的緩存策略。當我點擊'Select all'或'Unselect all'按鈕時,listView的上半部分(在屏幕上可見)不會刷新但是當我向下滾動listView時,由於緩存策略的原因,新生成的單元格將被更新,因爲它們是新的。同樣,當我回滾時,舊的細胞也被刷新,因爲它們被回收。

如何在我的listView中刷新開關狀態沒有滾動它?

非常感謝提前。

回答

1

如果你不是一個Android,那麼我的答案可能是不相關的。 我們在Xamarin.Forms具有完全相同的問題與列表視圖與文本和Android上的開關,事實證明有一個已知的Android錯誤,其中listview不刷新,我們已經結束了實施給出的解決方法(對不起,我不沒有這個答案的最初發現地址,因爲我沒有找到它)。

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

的解決方法是關閉緩存在Android上,我認爲錯誤僅適用於最新版本的Android操作系統,但我們沒有打擾區分。

+0

感謝您的答案,但問題發生在這兩個平臺。我已經嘗試禁用Recycle元素,但列表仍然不刷新AND很慢:/。 – Niky

+0

我找到了解決方法,我禁用了recycle元素,並使用此方法刷新了我自己的ObservableCollection擴展類上的列表。 'public void AddAndRemoveItem(T item) { this.Items.Add(item); this.OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); this.Items.Remove(item); this.OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); }' – Niky

+0

@allister Dude !!!我花了很多時間試圖解決這個問題。 –