簡體   English   中英

Xamarin.Forms - 強制重繪 ListView 布局

[英]Xamarin.Forms - Force ListView layout to redraw

我有一個帶有HasUnevenRows = true的 ListView,其中每個單元格的內容開始時都是不同的,但內容也可以動態更改(通過單擊單元格中的按鈕)。 當 ListView 最初加載時,系統必須執行計算,以便根據內容正確確定和繪制每個單元格的高度。

但是當我在初始加載后更新內容時,同樣的計算顯然沒有完成,因為單元格的高度不會改變——直到我將該項目滾動到視圖之外然后又回到視圖中。

如何在不完全刷新 ListView 的情況下強制執行相同的計算並手動重繪?

我嘗試將 ListView 包裝在框架中並在框架上調用.ForceLayout() ,但沒有成功。

默認情況下不會重新計算單元格的高度,因為這是一個昂貴的過程。 如果要強制重新調整大小,則需要在單元格上調用ForceUpdateSize()

注意:這不適用於舊版本的Xamarin Forms。 它是在2.0.0.0中添加的,但嘗試更新到至少2.2.0.31

我很幸運得到了原生控件來重繪。 對我((IVisualElementController)Element).NativeSizeChanged()的一件事是在自定義渲染器中: ((IVisualElementController)Element).NativeSizeChanged()

設置你的CachingStrategy =“RetainElement”,它很昂貴,但會強制進行更新。 如果您的列表不是太長,您將不會注意到。

我注意到如果一個單元格可見,即使綁定到一個obserablecollection,該單元格也不會更新,直到我向上滾動然后向下。

如果希望視圖自動刷新,則必須使用DataBinding。

        YourListView.BeginRefresh ();
        YourListView.EndRefresh ();

但我強烈建議不要這樣做。

最簡單有效的方法是:

myListView.ItemsSource = null;
MyListView.ItemsSource = myObservableCollection;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM