Xamarin.Forms - 强制ListView布局重绘

时间:2016-05-24 12:46:49

标签: ios listview xamarin xamarin.forms redraw

我有一个带有HasUnevenRows = true的ListView,其中每个单元格的内容都是变体,但内容也可以随时更改(通过单击单元格中的按钮)。当ListView最初加载时, 系统必须执行计算 ,以便根据每个单元格的内容正确确定和绘制每个单元格的高度。

但是当我在初始加载后更新内容时,显然没有完成相同的计算,因为单元格的高度不会改变 - 直到我将该项目滚动出去视图然后回到视图中。

如何在不完全刷新ListView的情况下强制执行相同的计算并手动重绘?

我尝试在框架中包装ListView并在框架上调用.ForceLayout(),但没有运气。

5 个答案:

答案 0 :(得分:5)

默认情况下不会重新计算单元格的高度,因为这是一个昂贵的过程。如果您想强制重新调整大小,则需要在单元格上调用 ForceUpdateSize()

注意:这不适用于旧版本的Xamarin Forms。它是在2.0.0.0中添加的,但尝试更新至至少2.2.0.31

答案 1 :(得分:2)

我很难获得原生控件来重绘。对我有用的一件事是自定义渲染器:((IVisualElementController)Element).NativeSizeChanged()

答案 2 :(得分:2)

设置您的CachingStrategy =“ RetainElement”,它很昂贵,但是会强制进行更多更新。如果您的清单不太长,您将不会注意到。

我注意到,即使一个单元格可见,即使绑定到一个可观察的集合,该单元格也不会更新,直到我向上滚动然后向下滚动为止。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

但我强烈建议不要这样做。