【问题标题】:slow page trasitions due to databinding由于数据绑定导致页面转换缓慢
【发布时间】:2012-04-23 15:21:29
【问题描述】:

我正在 wp7 中制作搜索应用程序。每条记录的数据都绑定到一个用户控件。我引入了无限加载而不是给出页码。因此,当屏幕中 UserControl 的实例数量增加时,从一个页面到另一个页面(如预览或设置页面)的转换或从该页面返回到当前页面的速度会变慢。我无法更改设计(无限加载概念)。

有哪些方法可以处理这种情况?如何更改控件的可见性?并高度赞赏参考或建议。

注意我标记了 WPF 和 Silverlight,因为绑定在它们中以相同的方式发生,预计它们已经处理了这样的场景。

编辑检查这个question,这是我问的。由于在列表框中有用户控件,因此没有维护垂直偏移量。因此,除了在其周围使用带有 scrollViewer 的 ItemsControl 之外,我别无选择。 ItemsControl 包含 5 - 6 个用户控件的列表,其中实习生在其中有 itemsControls,我认为在这种情况下可能不会发生虚拟化。我说的对吗?

【问题讨论】:

  • VirtualizingStackPanel 是你的朋友。

标签: wpf silverlight windows-phone-7 data-binding windows-phone-7.1


【解决方案1】:

在 WPF 中,这是由虚拟化完成的

使用Virtualization,实际上只创建了UserControl 的一个副本(或几个副本),而切换到另一个用户控件实际上只是换出了控件绑定到的DataContext。它实际上并没有创建一个新的UserControl

例如,如果您有一个包含 100,000 个项目的 VirtualizingStackPanel,并且一次只有 10 个可见,它只会渲染大约 14 个项目(滚动缓冲区的额外项目)。当您滚动时,这 14 个控件后面的 DataContext 会更改,但实际控件本身将永远不会被替换。相比之下,普通的 StackPanel 在加载时实际上会渲染 100,000 个项目,这会大大降低应用程序的性能。

这个关于Virtualizing an ItemsControl 的问题可能会让你朝着正确的方向前进。

【讨论】:

  • 感谢您提供此信息,我会检查并回复您。我已经稍微更新了我的问题,请检查在这种情况下是否可以进行虚拟化。
  • @Prakash ItemsControl 默认情况下不会虚拟化它的项目,但是我在答案中的链接将向您展示如何使其虚拟化
【解决方案2】:

看看this post,相信Rico提供的解决方案就是你想要的。 :)

【讨论】:

  • 我不完全明白它对这个案子有什么帮助。
  • 抱歉,我误解了你的问题,我以为只有一个“添加更多”按钮...请问为什么每个用户控件都需要一个?
  • 每个用户控件都有不同的类别。加载更多他想要的内容是用户的兴趣。
  • 在您的情况下,您必须使用ListBox...我认为虚拟化ItemsControl 在这种情况下不会起作用。您是否尝试ScrollIntoView 滚动到您单击“加载更多”按钮的用户控件?
  • 对于繁重的用户控件及其数据,我发现 ItemsControl 上的 scrollViewer 比使用列表框更流畅。因为像我提到的带有用户控件的列表框不能有虚拟化。检查问题:stackoverflow.com/questions/10009982,它解释了我的应用场景。
猜你喜欢
  • 2022-01-24
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
  • 1970-01-01
相关资源
最近更新 更多