【发布时间】: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 虚拟化,从而提高应用程序性能。