【问题标题】:Xamarin.Forms - Force ListView layout to redrawXamarin.Forms - 强制 ListView 布局重绘
【发布时间】:2016-09-21 16:42:09
【问题描述】:

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

但是当我在初始加载后更新内容时,显然没有完成相同的计算,因为单元格的高度不会改变——直到我将该项目滚动到视野之外然后重新进入视野。

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

我尝试将 ListView 包装在 Frame 中并在框架上调用 .ForceLayout(),但没有成功。

【问题讨论】:

    标签: ios listview xamarin xamarin.forms redraw


    【解决方案1】:

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

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

    【讨论】:

    • 有趣 - 我刚刚尝试过,但我的应用程序在调用该命令时崩溃了。我用.Clicked 事件调用ForceUpdateSize() 在单元格内创建了一个按钮。
    • ForceUpdateSize(),哈哈——就是这样。
    • 所以.....原来我的 Xamarin.Forms 版本是问题所在。我在 2.1.0.6526。一旦我升级到 2.2.0.31,它就可以工作了!!
    【解决方案2】:

    设置你的 CachingStrategy="RetainElement",它很昂贵,但会强制更新更多。如果您的列表不太长,您不会注意到。

    我注意到如果一个单元格是可见的,即使绑定到一个 obserablecollection,该单元格在我向上然后向下滚动之前不会更新。

    【讨论】:

    • 我使用了 CachingStrategy="RecycleElement" 并且成功了。
    【解决方案3】:

    让本机控件重绘我运气不佳。对我有用的一件事是在自定义渲染器中:((IVisualElementController)Element).NativeSizeChanged()

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 我不想刷新数据,我只想在当前状态下重绘列表。
      • 你的列表视图使用 DataTemplate 吗?
      • 是的,我有一个单独的 DataTemplate 文件。
      • 我知道,当您从列表中删除某些内容并且您的 itemsource 为 observableCollection 时,它可以工作,它会升级视图.. 但我不知道它是否适合您。而且我也不知道您是否可以在列表视图中的每行有不同的大小。
      • @MrKocak - 这与动态改变高度有什么关系?抱歉,我没有关注。
      【解决方案5】:
              YourListView.BeginRefresh ();
              YourListView.EndRefresh ();
      

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

      【讨论】:

      • 我不想完全刷新列表,因为我处于需要保留的项目的特定状态。
      • 它不会刷新它。它只会重新计算行/列表高度
      • 我刚试了一下,没有效果。我添加了一个带有.Clicked 事件的“刷新”按钮,该事件调用myListView.BeginRefresh()myListView.EndRefresh(); 不走运。甚至在被点击的情况下,我什至打电话给myListView.TranslateX = 100; 以确保它正确地影响了列表,而且确实有效。但是 BeginRefresh 和 EndRefresh 什么也没做。
      猜你喜欢
      • 2013-08-30
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多