简体   繁体   中英

Xamarin.Forms - Force ListView layout to redraw

I have a ListView with HasUnevenRows = true , where the content of each cell is variant to begin with, but the content can also change on the fly (through clicking of a button in the cell). When the ListView initially loads, the system must perform a calculation in order to correctly determine and draw the heights of each cell based on their content.

But when I update the content after the initial load, this same calculation is apparently not done, because the height of the cell does not change -- until I've scrolled that item out of view and then back into view.

How can I force this same calculation and redraw manually, without completely refreshing the ListView??

I tried wrapping the ListView in a Frame and calling .ForceLayout() on the frame, but no luck.

The height of the cells aren't recalculated by default because it is an expensive process. If you want to force a re-size you need to call ForceUpdateSize() on the cell.

NOTE: This does not work on older versions of Xamarin Forms. It was added in 2.0.0.0, but try updating to at least 2.2.0.31

I've had terrible luck getting native controls to redraw. The one thing that has worked for me has been in a custom renderer: ((IVisualElementController)Element).NativeSizeChanged()

Set your CachingStrategy="RetainElement", it's expensive, but will force an update a lot more. If your list isn't too long, you won't notice.

I've noticed that if a cell is visible, even though bound to an obserablecollection, that cell doesn't update until I scroll up then down.

如果希望视图自动刷新,则必须使用DataBinding。

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

But i strongly recommend not to do this.

The most simple and effective way is:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM