问题标签 [ui-virtualization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Wpf:属性更改的 ListView 更新比实际数据库查询慢得多
我正在为我的应用程序构建一个搜索功能,其中匹配产品列表应在每次击键时更新,但它太慢了,奇怪的是 GUI 中的实际更新时间比检索所需的时间长得多数据库中的匹配产品。
为了避免在列表中缓慢滚动,我正在使用此处描述的虚拟化:http: //www.codeproject.com/Articles/34405/WPF-Data-Virtualization,滚动现在非常顺利,但更新列表需要很多秒对于大约 30000 个产品,编写第 4 个字母(然后生成 <100 个产品)与编写第一个字母时一样慢。
代码类似于 codeproject 一,XAML:
视图模型:
我的产品名称提供商:
我设法测量的唯一代码是视图模型中的代码,我知道这已经足够快了,有没有办法测量和评估更新 GUI 所需的剩余时间?
c# - 用于 ListBox 的 WPF ScrollViewer -> 性能问题
我正在尝试使用 withgrid
创建。它以某种方式完成:listbox
Scrollbar
问题是,如果我使用滚动条,那么条形按钮的大小会在滚动过程中前后跳跃。如果我ScrollViewer
从属性中删除,而是将 ListBox 放入ScrollViewer
标记中,那么一切都运行良好,除了重新渲染 UI 的糟糕性能(调整大小、移动窗口、消耗资源)。据谷歌称,它确实“禁用虚拟化”。这听起来很疯狂,因为没有简单的解决方案可以让滚动条和可用的 UI 正常工作而不会出现问题。
这两件事有妥协吗?虚拟化 + 正确scrollviewer
使用固定大小的scrollbar
按钮。
c# - 使用 VirtualizingPanel.ScrollUnit="Pixel" 在巨大的 ListBox 中滚动
在 WPF 4.5 的 ListBox 中显示一个相当长的列表时,我遇到了一些速度问题:我的 ListBox 包含大约 5000 个项目,这些项目可以有不同的高度。每个项目显示通过查询检索到的信息,该查询在项目显示后立即执行。这种延迟的查询执行是必要的,因为一次对所有内容执行此操作会花费太多时间。我通过将 ItemsControl 绑定到NotifyTaskCompletion对象来完成延迟查询,该对象是在首次访问项目中的 Property 时创建的。
例如:
因此,每次显示一个项目时,它都会启动一个执行查询的线程,并在查询完成后显示内容。通过查询检索到的信息可能非常多,这意味着 ListBox 中的项目可能比 ListBox 本身大。这就是为什么我需要在 ListBox 中设置 VirtualizingPanel.ScrollUnit="Pixel" 以确保用户可以看到整个项目。
但是,这会大大减慢滚动速度。如果我将滚动条中的拇指拖到列表中间,则会冻结几秒钟,之后会显示一些项目而没有查询到的信息。然后,一些项目显示查询的信息。ListBox 然后似乎跳到另一个位置,这再次导致另一个冻结等等。看起来 ListBox 渲染了当前滚动位置上方的所有项目,由于所有查询和查询数据的复杂渲染,这需要很长时间。
如果我设置 VirtualizingPanel.ScrollUnit="Unit",我没有任何速度问题。ListBox 只显示滚动到的项目,因此只显示查询的信息。不幸的是,我需要使用“像素”设置,因为我的项目有时太大以至于我需要像素滚动以确保用户可以看到所有内容。
我知道最好有一个查询队列以避免一次启动数百个线程,但我认为这不会改变 ListBox 呈现我的项目的基本问题不会被显示。
我不确定如何解决这个问题。谁能帮我吗?
wpf - 如何通过重新定义的 ListBox 模板使用 UI 虚拟化
我正在尝试将 ListBox 用作包含多个项目的视图,当然,我需要在其中使用 UI 虚拟化。
问题是只有当我以这种方式声明 ListBox 时,虚拟化才有效:
但是如果我尝试自定义它,它就不再虚拟化了:
据我所知,这个示例包含的内容与 ListBox 默认包含的内容相同。但是虚拟化不起作用。我在这里阅读了几篇文章和几个答案,但仍然无法弄清楚“一般方式” - 我必须在哪里设置、绑定、添加等以使虚拟化与自定义模板一起工作?
java - 使用 java swing 模拟 apk 文件以便在我的桌面上使用它
我有一个 apk 文件列表,我必须能够在 java swing 应用程序中使用它。就像当我按下一个选项卡时,它必须模拟 apk 文件 1,另一个选项卡 2。同样明智。
以一种更好的方式,我需要在 java swing 中虚拟化 apk 以将其用作我的桌面应用程序以使我感到舒适。
提前致谢!!。
c# - WPF TreeView:为什么虚拟化会破坏 BringIntoView()?
当您在 WPF 中设置VirtualizingStackPanel.IsVirtualizing="True"
a时:TreeView
以下带有调用的代码隐藏TreeViewItem.BringIntoView()
不起作用:
然而,当您删除 line 时VirtualizingStackPanel.IsVirtualizing="True"
,它会将lastTvi2
对象(树中的最后一项)带入视图。为什么这会破坏TreeViewItem.BringIntoView()
方法?这是正常行为,还是 .NET 错误?
windows-phone-8 - Items being reordered in LongListSelector
In my WP8 app, I'm using LongListSelector to display data items. Grouping works, jump list works.
I have the usual master/detail scenario here - click on item in the list, new page shows up with more information.
The problem is with navigating back to the page with LongListSelector. The list is basically messed up - items are randomly reordered, even between groups. Clicking on an item works properly - ShowItemInfo
receives view model for the item the user clicked on.
Previously I was using ListBox, which too suffered from this issue. But I could disable virtualization by using default StackPanel as items panel. I don't know how to disable virtualization on LongListSelector (I don't want to, but the bug is horrible).
View model is simple. I'm using Caliburn.Micro, its conventions and BindableCollection
for list of groups. I populate the list just once with AddRange
method.
When the page is navigated back to, I'm not doing anything - and I even can't since I use MVVM and Caliburn.Micro. The items are loaded into list in OnInitialize
callback, which is invoked only once during lifetime of view model.
The XAML for view is this:
c# - WPF:带有滚动条的 ListBoxItem
是否有可能(默认ListBox
包含)和with ?我想实现下一个视图:
ScrollViewer
ListBoxItem
ScrollViewer
而且这个 ListBox 也应该支持虚拟化。(我知道如何启用它,我只是想知道如果我使用 2 个滚动查看器它会起作用吗?)
更新:
我需要使用ListBox.ItemTemplate
,因为我正在绑定ItemsSource
.
感谢您的提示。
c# - 需要为实现做好准备的 ObservableCollection 中的 ListView 项
我有一个 ListView,它应该显示由“名称”、“缩略图”和“AnimationPosition”属性组成的相当多的项目。每个项目类型中的后台任务负责切换缩略图以对其进行动画处理。
现在不言而喻,这是一个相当繁重的操作,应该限制为尽可能少的项目,例如虚拟化 ListView 的可见/实现项目。现在我已经将 ListView 的 DataContext 设置为 ObeservableCollection 实例,并将其绑定到其类型的属性。这是我的 XAML 代码的一瞥。
基本上,我有两种方法可以为每个单独的项目启动/停止动画。
我这里有两个问题。
- ListView 似乎实现了所有项目,而不仅仅是那些可见或在实现范围内的项目。我怀疑我的 XAML 以某种方式杀死了虚拟化,并且尝试了许多解决方案但没有成功。请注意,我需要我的 ListView 可以扩展到 MainWindow 的尺寸,而不是固定的高度和宽度。
- 当一个项目即将被实现时,我需要调用 StartAnimation,当它离开视图时,我需要调用 StopAnimation。
即使我的 ListView 没有正确虚拟化,如果我对 ObservableCollections 工作原理的理解是正确的,那么它只是由虚拟化管理的项目的 UI 表示,而不是项目本身,即从 Constructor/Destructor 调用 StartAnimation/StopAnimation这些项目并没有多大帮助,因为无论如何在创建时它们都被要求用于每个项目。
是否有一种巧妙的方法可以以某种方式通知每个项目它们即将实现或离开 ListView 视图?
更新: 虚拟化无法正常工作的问题与WrapPanel有关,一旦我切换到VirtualizingStackPanel,它就开始正常工作。不幸的是,它与WrapPanel并不完全相同,并且由于 .NET 框架不提供VirtualizingWrapPanel,因此我选择使用此处的那个。它并不完美,但可以完成工作。
c# - WPF内部集合虚拟化不起作用
我已经在 WPF 中实现了下面提到的代码,因为我已经实现了延迟加载的虚拟化,但是当我的内部集合有 1000 条记录时它不起作用,那么在屏幕上加载需要很长时间。
如果有人能告诉我我做错了什么,那将是很大的帮助提前谢谢。