c# - Windows Store App ListView 闪烁/内容消失

标签 c# xaml listview windows-store-apps

我在使用 ListView 时遇到了一些问题ItemsSource在哪里可能非常重要(超过 5,000 项)。

我的应用程序是由两个 ListView 组成的聊天应用程序。

  1. 左边一个,线程ListView显示事件线程列表 (对话)
  2. 右边一个,对话 ListView 显示所有已交换的消息。

我正在使用 DataTemplate模式,以便我的对话 ListView 的每个项目都自定义如下: 使用 Coding4Fun 的聊天气泡包裹:http://www.geekchamp.com/articles/getting-started-with-the-coding4fun-toolkit-windows-phone-chatbubble-control

每个聊天气泡都有两个 TextBlock (一个用于消息内容,另一个用于时间戳)。

稍后,我打算在此消息中添加图片。

当用户单击左侧面板 ListView 中的对话时,主对话 ListView 会加载相应的对话(可观察)集合。 如果该集合特别大(在一种情况下,我有超过 10'000 条消息), session ListView 会显示内容,但是一旦切换到另一个线程并返回到前一个,内容就不再显示,虽然它在这里,但它已加载。开始滚动,使 ListView 闪烁,因此内容可见但严重闪烁。如果我停止滚动,则不会显示任何内容,显示一个空列表。

进一步的测试表明,这个问题只发生在使用 ScrollIntoView() 的大集合中。方法:事实上,我希望每次用户单击一个线程时显示我的对话 ListView 的底部,以便他可以阅读最后一条消息而不是旧消息,因此节省了他必须一直滚动到底部,每个时间。

我通过注释掉让 ListView 滚动到底部的行来确认这个问题。闪烁问题消失了。

最后,当我写下我的问题时,我发现了一个似乎是我的情况的 stackoverflow 问题:Windows Store universal app - ListView oddity

不幸的是,解决方案不是很清楚。我该如何解决我的问题?我应该如何使用 VirtualizingStackPanel/>在已经使用 <ListView.ItemContainerStyle> 的 ListView 中, ListView.ItemTemplate><DataTemplate>

最佳答案

我的闪烁问题的解决方案以及如何实现 UI 虚拟化(通常在 Windows 8.1 中引入),如此处所述 https://www.microsoftpressstore.com/articles/article.aspx?p=2216995&seqNum=4如下:

<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <VirtualizingStackPanel Orientation="Vertical"/>
    </ItemsPanelTemplate>
</ListView.ItemsPanel>

放置在 ListView 范围内!

Orientation 必须定义(Vertical | Horizo​​ntal)否则会发生Critial Failure!

UI 虚拟化增强了大型 GridView 和 ListView,因此可以有效地加载大量数据,而不会减慢 UI 的速度,也不会阻塞它太久。

关于c# - Windows Store App ListView 闪烁/内容消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29845771/

相关文章:

c# - 更改禁用 ListView 的背景

c# - WPF:Tab 的 KeyBinding,吞下 Tab 并且不传递它

c# - Rhino.Mocks : method calls recorder (a. k.a.测试 spy )

c# - 如何动态设置异步页面指令以便异步方法工作

silverlight - 更新 ObservableCollection 导致 "The Parameter is incorrect"异常

wpf - WPF:如何设置或禁用文本框的默认ContextMenu

android - 我需要使用 AsyncTask 动态控制自定义 listView 按钮的行为

c# - 我的 .net 程序导致 BSOD

.net - XAML 解析异常

android - 如何删除 fragment ListView 中的项目?