问题标签 [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.

0 投票
1 回答
197 浏览

wpf - 基于 WPF 的树视图,具有层次结构和虚拟化

我在为应用程序设计 UI 时遵循要求。我们有如下所示的层次结构

  • 1级

    • 2.1级

      • 3级
        • 1000Thumbnails .....(在 ListBox 内的 Wrap Panel 内)
    • 2.2级

      • 3级
        • 1000Thumbnails .....(在 ListBox 内的 Wrap Panel 内)

我们希望为缩略图启用虚拟化,因为控件的数量可以超过 1000。 以下是应用程序的输出

然而,为了使虚拟化工作,我们需要限制 TreeView 中 ListBox 的大小。有了这个限制,我们最终有两个滚动条,如上图所示。

无论如何我们可以避免在 ListBox 中滚动查看器,但仍然可以使用 TreeView 控件的 ScrollViewer 进行虚拟化和滚动(使用鼠标)缩略图?

如果您需要更多信息,请告诉我。

提前感谢您的帮助!

0 投票
1 回答
177 浏览

wpf - ListViewItems 的生命周期

默认情况下,WPF ListView(带有GridView)是虚拟化的。ItemSource因此,当我使用 MVVM 模式(使用 Caliburn.Micro 但我想这并不重要)时,我将我的属性绑定到 ViewModel 中的可观察集合。

当ListView使用(在范围内并由 UI listviewitem 表示)和未使用时(不再在范围内并在用户界面)?

延迟加载一些详细数据会非常好,但仅适用于可见记录。

0 投票
0 回答
389 浏览

aurelia - Aurelia ui-virtualization infinite-scroll-next 功能在数据刷新后没有被命中

我正在使用 aurelia 的库来使用andui-virtualization创建一个表。Html 看起来像这样:virtual-repeatinfinite-scroll-next

这很好用,除了我有某些 ui 组件和交互来更新我的list数组中的内容。一旦更新,infinite-scroll-next函数 ( getMore()) 永远不会被调用。我更新这样的东西:

在哪里filterOptions通过 ui 更改并apiService.getData()从 http 调用返回一个承诺。表中的数据正确更新,但无限滚动随后被破坏。

我做错了什么,还是这是一个错误ui-virtualization

编辑:

似乎有一些属性添加到数组__array_observer____observers__. 考虑覆盖整个数组并因此删除这些属性可能会导致问题,我尝试了一种方法,我只需适当地添加或删除元素。这也不起作用。

编辑:

如果我在数组中留下少于 7 个原始元素,它似乎会失败。

0 投票
1 回答
538 浏览

c# - 自定义树视图的虚拟化

我制作了一个包含多列的自定义 TreeView。一切都运行良好,直到树中有很多项目。

我尝试通过这样做来启用虚拟化VirtualizingPanel.IsVirtualizing="True"VirtualizingStackPanel.IsVirtualizing如果您是 < .NET 4.5 则将是),但它不仅没有加快速度,而且实际上使加载时间变得更糟。
在普通的 TreeView 上,这个属性可以解决问题,但我找不到让它在我的自定义树上工作的方法

树视图项.cs

树列表视图.cs

节点.cs

视图模型.cs

主窗口.xaml

我尝试将 ItemPanel 模板化VirtualizingStackPanel,但它也没有帮助。

我去掉了扩展器部分,因为它不相关。您可以双击父节点展开树,加载子节点需要很长时间。

0 投票
1 回答
124 浏览

c# - Popup 内的 UI 虚拟化

我无法让虚拟化在TreeView内部工作,PopupTreeViewPopup.

ViewModel 和 Node 类

当我在窗口内展开树的父级时,它不需要时间,而在弹出窗口内展开一个需要大约 20 秒。

MS 确认这是2010 年代的一个错误,并建议使用 ControlTemplate 将 ToggleButton 和 TreeView 合并到一个控件中,但它对我没有任何影响。

0 投票
1 回答
185 浏览

c# - 内部具有不同方向的 WPF 虚拟化 TreeView 不会虚拟化?

我有一个TreeView多层的 XAML。使用此解决方案,我可以获得每个不同层的 XAML 配置外观,并确认它是 UI 虚拟化。

但是,当我将特定层切换为与其父层VirtualizingStackPanel不同Orientation(无论是通过像这个解决方案这样的代码还是使用Snoop都无关紧要),然后 UI 虚拟化就会关闭,并且一旦我展开它就会TreeView实现所有TreeViewItem层。

在研究这种行为时,我注意到在VirtualizingStackPanel您深入研究其MeasureOverride功能的参考源中,您会在第 2116 行找到以下评论

计算此面板的方向是否不同(原文如此)其父或后代

微软似乎有意为这种情况禁用了 UI 虚拟化。所以我有两个问题:

  • 为什么层之间的方向一致性很重要?
  • 如何让 UI 虚拟化在其中TreeView具有不同方向的情况下工作?
0 投票
1 回答
659 浏览

uwp - 使用 UWP windows mobile 10 在 Xamarin Forms 上禁用 UI 虚拟化

我正在使用 Xamarin.Forms 解决 UWP 应用程序的问题。我注意到默认情况下列表视图项在 UWP 中被回收和重用。例如,当我更新列表视图中的第一项(新值甚至样式)时,列表中的第四个、第七个、第十个等项将使用相同的值或样式进行更新。根据这篇文章,这是设计行为。

我已经尝试了几种实验方法以及本文中建议的解决方法,还设置了 ListViewCachingStrategy,以覆盖或禁用它,但我没有机会修复它。

有没有人遇到过这个问题?!在 UWP windows mobile 10 上是否可以禁用或覆盖 UI 虚拟化?

0 投票
0 回答
633 浏览

wpf - 设置 WPF 控件的 MinHeight 是否可以作为 VirtualizingStackPanel.ExtendViewport 失败的解决方法?

如果是的话,最好的选择是什么?具有虚拟化或其他功能的 DataGrid?这种情况很少发生,所以试错不是一种选择。我使用的 xaml 和转换器的一部分在最后。

当刷新 DataGrid 的 itemssource (ICollectionView) 时,有时会发生这种情况(可能是 1/1000?)。

2017-10-06 09:00:35:myapp.exe 错误:0:未处理的异常。System.ArgumentException:高度必须为非负数。

在 System.Windows.Rect.set_Height(双值)

在 System.Windows.Controls.VirtualizingStackPanel.ExtendViewport(IHierarchicalVirtualizationAndScrollInfo 虚拟化信息提供者,布尔是水平的,矩形视口,VirtualizationCacheLength 缓存长度,VirtualizationCacheLengthUnit 缓存单元,大小 stackPixelSizeInCacheBeforeViewport,大小 stackLogicalSizeInCacheBeforeViewport,大小 stackPixelSizeInCacheAfterViewport,大小 stackLogicalSizeInCacheAfterViewport,大小 stackPixelSize&,InxtendedViewport 大小)

在 System.Windows.Controls.VirtualizingStackPanel.IsExtendedViewportFull()

在 System.Windows.Controls.VirtualizingStackPanel.ShouldItemsChangeAffectLayoutCore(布尔 areItemChangesLocal,ItemsChangedEventArgs 参数)

在 System.Windows.Controls.VirtualizingPanel.OnItemsChangedInternal(对象发送者,ItemsChangedEventArgs 参数)

在 System.Windows.Controls.Panel.OnItemsChanged(对象发送者,ItemsChangedEventArgs args)

在 System.Windows.Controls.ItemContainerGenerator.OnItemAdded(对象项,Int32 索引)

在 System.Windows.Controls.ItemContainerGenerator.OnCollectionChanged(对象发送者,NotifyCollectionChangedEventArgs 参数)

在 System.Windows.WeakEventManager.ListenerList`1.DeliverEvent(对象发送者,EventArgs e,类型 managerType)

在 System.Windows.WeakEventManager.DeliverEvent(对象发送者,EventArgs 参数)

在 System.Collections.ObjectModel.ReadOnlyObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs 参数)

在 System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)

在 System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 索引,T 项)

在 MS.Internal.Data.CollectionViewGroupInternal.Insert(对象项,对象种子,IComparer 比较器)

在 MS.Internal.Data.CollectionViewGroupRoot.AddToSubgroup(对象项,LiveShapingItem lsi,CollectionViewGroupInternal 组,Int32 级别,对象名称,布尔加载)

在 MS.Internal.Data.CollectionViewGroupRoot.AddToSubgroups(对象项,LiveShapingItem lsi,CollectionViewGroupInternal 组,Int32 级别,布尔加载)

在 System.Windows.Data.ListCollectionView.AddItemToGroups(对象项,LiveShapingItem lsi)

在 System.Windows.Data.ListCollectionView.ProcessCollectionChangedWithAdjustedIndex(NotifyCollectionChangedEventArgs 参数,Int32 调整的OldIndex,Int32 调整的新索引)

在 System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)

在 System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 索引,T 项)

在 MS.Internal.Data.EnumerableCollectionView.LoadSnapshotCore(IEnumerable 源)

在 MS.Internal.Data.EnumerableCollectionView.LoadSnapshot(IEnumerable 源)

在 System.Windows.Data.CollectionView.RefreshInternal()

XAML:

上面 XAML 中使用的 IMultivalueConverter 的转换方法:

0 投票
1 回答
45 浏览

c# - 滚动时不应用模板

我正在使用带有滚动查看器的网格。我设计了没有更多 UI 元素的网格。在打开该报告时,由于性能问题,我只呈现了第一页 UI 元素。滚动时,需要呈现剩余的 UI 元素。

我的问题是,

滚动滚动查看器模板不会应用于几秒钟的剩余元素。但首页 UI 元素已使用模板正确更新。

为什么执行滚动模板一秒钟都没有应用?

Xaml 文件的代码片段:

后面的代码:

提前致谢。

0 投票
1 回答
332 浏览

wpf - 组合框的虚拟滚动选项

我需要将可见项目显示到视图中,而不是在组合框控件中显示所有行。滚动时,我们需要加载下一个可见项目。

我怎样才能做到这一点?另外,如何确保它是否虚拟加载?

示例:

前端:

参考链接后: