Xamarin.Forms – 强制ListView布局重绘

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

但是,当我在初始加载之后更新内容时,同样的计算显然没有完成,因为单元格的高度没有改变 – 直到我将该项目滚动到视图之外,然后返回到视图。

我怎么能强制这个相同的计算和手动重绘,而不是完全刷新ListView?

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

单元格的高度不是默认重新计算的,因为这是一个昂贵的过程。 如果你想强制重新resize,你需要调用单元格上的ForceUpdateSize()

注意:这不适用于旧版本的Xamarin窗体。 它被添加到2.0.0.0,但是尝试更新到至less2.2.0.31

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

我有可怕的运气得到本地控制重绘。 有一件事情已经在我自定义的渲染器中: ((IVisualElementController)Element).NativeSizeChanged()

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

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