【问题标题】:ListBox is virtual by default?ListBox 默认是虚拟的吗?
【发布时间】:2012-11-10 22:04:26
【问题描述】:

我有一个 WPF 列表框,里面有一些用户卡。
当其中一张用户卡被创建时(在理想情况下,当当前用户从网络收到它的朋友列表时),它会向网络请求用户的信息。
当我在 ListBox 中滚动,等待几秒钟,然后向后滚动时,用户卡具有它们的默认状态。
调试后,我注意到它们被卸载并重新创建。

如何阻止 ListBox 像这样虚拟化项目?


代码:

            <ListBox x:Name="friend_list" Background="{x:Null}" BorderBrush="{x:Null}">
                <ListBox.ItemTemplate>
                    <DataTemplate DataType="data:User">
                        <stuff:UserCard UserID="{Binding Path=UserID}" HorizontalAlignment="Stretch" Margin="0,0,0,0" />
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

【问题讨论】:

  • 也是的,ListBox 默认是虚拟的,你不应该禁用 UI 虚拟化。
  • 反正里面不会有很多东西。此外,这个应用程序的用户肯定会拥有强大的计算机。几千字节(甚至几兆字节)的 RAM 对他们来说不算什么。
  • 我不明白。我看到了 ListBox 和 ItemTemplate,但我不知道它从哪里获取项目。
  • 拥有好机器的用户没有理由实现糟糕的应用程序,因为开发人员这样做有很多 WPF 仇恨者
  • @Joulukuusi。馊主意。应该有一个 ViewModel 来保留数据,并单独保留 UI 虚拟化,从而提高应用程序性能。

标签: wpf listview


【解决方案1】:

ListBox 上将VirtualizingStackPanel.IsVirtualizing 设置为false 或将普通StackPanel 设置为ListBox.ItemsPanel

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-23
    • 2016-03-26
    • 2011-07-22
    • 2017-01-26
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多