【发布时间】:2015-04-24 11:00:57
【问题描述】:
ListView 有一些问题,ItemsSource 可能非常重要(超过 5'000 个项目)。
我的应用程序是由两个 ListView 组成的聊天应用程序。
- 左边一个,线程ListView显示活动线程列表 (对话)
- 在右侧,对话 ListView 显示所有交换的消息。
我正在使用DataTemplatepattern,以便我的对话 ListView 的每个项目都自定义如下:
使用Coding4Fun 包的聊天气泡:http://www.geekchamp.com/articles/getting-started-with-the-coding4fun-toolkit-windows-phone-chatbubble-control
每个聊天气泡有两个TextBlock(一个用于消息内容,另一个用于时间戳)。
稍后,我打算在此消息中添加图片。
当用户从左面板 ListView 中单击对话时,主对话 ListView 会加载相应的对话(可观察)集合。 如果该集合特别大(在一种情况下,我有超过 10,000 条消息),对话 ListView 会显示内容,但一旦切换到另一个线程并返回上一个,内容就不再显示,虽然它在这里,但它已加载。开始滚动,使 ListView 闪烁,因此内容可见但严重闪烁。如果我停止滚动,则不显示任何内容,显示一个空列表。
进一步的测试表明,这个问题只发生在与 ScrollIntoView() 方法的使用一致的大型集合中:确实,我希望每次用户单击线程时都显示我的对话底部 ListView 以便他可以阅读最后一条消息而不是旧消息,因此他每次都必须一直滚动到底部。
我通过注释掉让 ListView 滚动到底部的行来确认这个问题。闪烁问题消失了。
最后,当我写下我的问题时,我发现了一个似乎是我的情况的 stackoverflow 问题:Windows Store universal app - ListView oddity
不幸的是,解决方案不是很清楚。我该如何解决我的问题?我应该如何在使用<ListView.ItemContainerStyle>、ListView.ItemTemplate>和<DataTemplate>的ListView中使用VirtualizingStackPanel/>?
【问题讨论】:
标签: c# xaml listview windows-store-apps