繁体   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