问题标签 [data-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 DataGrid 列虚拟化
我正在尝试在我的 DataGrid 上执行水平虚拟化。我的收藏是类型:
它的第一个维度长度是 64,第二个维度大约是 5000
我一直在使用 Paul McClean 的 VirtualCollection来实现垂直虚拟化
我的 IItemsProvider 封装了一个迭代器,它返回字符串 [] 的项目,它代表我表中的一行。
我的 ItemsProvider :
迭代器:
}
综上所述,我通过 VirtualCollection 接收特定范围的字符串 [] 项。
我现在正在尝试对列进行虚拟化,我的列是在运行时由给定的 Extent 生成的,这是在附加属性的回调中完成的,在静态类 DataGridBuilderUtil 中
CS :
在 DataGridBuilderUtil 我还附加了 DataGrid 的 ScrollViewer ScrollChanged 事件,当水平范围发生变化时:
1)我添加了一个新列。
2) 我更新了 Iterators Extent 以容纳另一列。
3)我重新垂直滚动到相同的位置,这使得我的 ItemsSource (VirtualCollection) 派生自 IList 来查询它的索引并再次请求当前页面(在我的标志 IsDefferedLoadPageRequired 的帮助下)
所以现在在 VirtualCollection 里面
这需要 ItemsProvider :
它需要 Iterator ,请记住,我们的 Extent 已递增以容纳另一列。
所以现在我有一个字符串 [] 项目,它增加了字符串 [20] 项目现在是字符串 [21] 我的水平数据虚拟化工作。
问题是我的单元格以这种方式绑定:(来自上面的 CreateColumn 方法)
在新列中的每个单元格中都有绑定错误(加载集合时生成的原始列中的绑定工作正常:
我认为这与创建列时该行的数组项不包含该索引有关,或者我也尝试在更新数组后创建列。
结果相同。
这里最大的问题是,为什么绑定不起作用,以及如何刷新绑定?
此外,我设置 DataGrid.EnableColumnVirtualization = True 将所有这些结合在一起(如果绑定有效)。
编辑 :
我还尝试在更新集合后创建列:
在 VirtualCollection 重新加载当前页面后引发 OnLoadComplete。
wpf - VirtualizingStackPanel 与虚拟化列表
我正在开发一个应用程序,该应用程序应该以类似列表/网格的方式显示从其他地方(例如数据库)加载的大量项目。
由于一直将所有项目都放在内存中似乎是一种浪费,因此我正在研究虚拟化列表的一部分的方法。VirtualizingStackPanel
看起来就像我需要的一样 - 但是,虽然它似乎在虚拟化项目的 UI方面做得很好,但我不确定如何虚拟化底层项目列表本身的部分。
作为一个小示例,考虑一个以此作为主窗口的 WPF 应用程序:
提供列表的代码隐藏应如下所示:
因此,这将显示一个带有 的应用程序,该应用程序ListBox
被迫使用IsVirtualizing
附加的属性虚拟化其项目。它从数据上下文中获取其项目,为此提供了一个自定义IList<T>
实现,可以动态创建 10000 个数据项(当它们通过索引器检索时)。
出于调试目的,每当创建项目时都会输出文本ADD #
(其中等于项目索引),并且该事件用于在项目离开视图并且其 UI 被虚拟化堆栈面板释放时输出。#
CleanUpVirtualizedItem
DEL #
现在,我希望我的自定义列表实现根据请求提供项目 - 在这个最小的示例中,通过动态创建它们,在实际项目中通过从数据库加载它们。不幸的是,VirtualizingStackPanel
它似乎并没有以这种方式表现 - 相反,它在程序启动时调用列表的枚举器并首先检索所有 10000 个项目!
因此,我的问题是:如何使用 VirtualizingStackPanel 进行数据的实际虚拟化(例如,不加载所有数据),而不仅仅是减少 GUI 元素的数量?
- 有没有办法告诉虚拟化堆栈面板总共有多少项目,并告诉它根据需要通过索引访问它们,而不是使用枚举器?(例如,如果我没记错的话, Delphi Virtual TreeView 组件可以工作。)
- 当一个项目实际进入视野时,是否有任何巧妙的方法来捕获事件,所以至少我通常可以只存储每个项目的唯一键,并且只在请求时加载剩余的项目数据?(不过,这似乎是一个 hacky 解决方案,因为除了满足 WPF API 之外,我仍然必须无缘无故地提供完整的列表。)
- 另一个 WPF 类是否更适合这种虚拟化?
编辑:按照开发刺猬的建议,我创建了一个自定义ICollectionView
实现。它的一些方法仍然实现为 throw NotImplementedException
s,但在打开窗口时调用的方法却没有。
但是,似乎该集合视图调用的第一件事是GetEnumerator
方法,再次枚举所有 10000 个元素(正如调试输出所证明的那样,我为每 1000 个项目打印一条消息),这就是我正在尝试的避免。
以下是重现该问题的示例:
Window1.xaml
Window1.xaml.cs
c# - 使用 IObservableVector 进行数据虚拟化在 Windows 8.1 中
我将大量数据加载到我的 Windows 8.1 应用程序中的 ItemsControl [ 100000 个项目] 中。当我阅读 MSDN 文档时,我可以看到 IObservableVector 是实现 Random DataVirtualization 概念的最佳选择。
不幸的是,我无法找到在 Windows 8.1 中使用 DataVirtualization 概念复制 IObservableVector 实现的好的示例。您能否请任何人建议我获取使用 IObservableVector 实现的确切示例?
metadata - 在 Marklogic 中创建元数据目录
我正在尝试使用 Marklogic 组合来自多个来源的数据,例如 RDBMS、xml 文件、Web 服务。为此,正如我从关于元数据目录 ( https://www.marklogic.com/solutions/metadata-catalog/ )、数据虚拟化 ( https://www.marklogic.com/solutions/data-virtualization/ )的 MarkLogic 文档中看到的那样和数据统一是很有可能的。但是我无法获得任何描述如何进行操作或使用哪些工具来实现此目的的文档。
寻找一些指针。
c# - 具有数据虚拟化的 ListView 中的 WPF 定向导航
根据这篇文章,我已经在 WPF 中使用 ListBox 实现了数据和 UI 虚拟化。简而言之,我将 ListView 绑定到一个集合,该集合会在需要时一次自动加载页面数据。如果 ListView 请求页面上尚未加载的项目,则集合将返回 null,异步加载页面,然后发出 Reset NotifyCollectionChanged 事件,以便 ListView 将获取实际值。
当我尝试使用方向键浏览列表时,这可以正常工作,直到我点击 ListView 第一次获得焦点时未加载的项目。此时,ListView 本身成为焦点。如果我确保通过滚动列表开始加载所有数据(从而强制显示所有项目并因此加载),则定向导航正常工作。
看起来 ListView 以某种方式记住了最初为空的数据并拒绝将焦点移到这些项目上。这里发生了什么?我怎样才能解决这个问题?
c# - Telerik RadJumpList 使用 DataVirtualizationMode.Automatic
我有一个问题,我试图将 Telerik Jump List 与 DataVirtualizationMode.Automatic 一起使用,但我无法让它工作。我想使用它的原因是因为我希望我的应用程序只下载跳转列表控件当前视图中的数据(游戏),而不是每次都下载整个数据。例如,如果我搜索了“蝙蝠侠”,它返回了 50 款游戏,我不希望它下载和加载所有游戏,只下载我可以在跳转列表控件中看到的那些游戏。
这是使用 Telerik 的 DataVirtualizationMode.Automatic 的示例,但我无法让它与我的应用程序一起使用:http ://www.telerik.com/help/windows-phone/raddataboundlistbox-features-datavirtualization-automatic.html
下面是我想与数据虚拟化一起使用的跳转列表控件。
MainPage.xaml:
下面是我将我的 DataContext 绑定到我的 GameData 类中的 GetGamesListItems ObservableCollection 的地方。当用户在我的文本框 txtSearch 中键入例如“蝙蝠侠”并点击按钮时,将调用 imgBtnSearchGame_Click 事件方法,然后它将文本发送到我的 GetGamesListData 方法。
主页.cs:
下面是我下载用于搜索游戏名称的 XML 数据的地方。例如,如果它是“蝙蝠侠”,它将查找并返回所有带有“蝙蝠侠”的游戏。“BoxArtFrontThumb”属性是我存储每个游戏的所有图像并使用异步的地方,因为有时它必须下载和显示很多图像。
游戏数据.cs
下面是它查找和存储游戏图像的地方。
我真的希望我解释得足够好,并希望有人可以帮助我解决这个问题。谢谢。
tomcat - How do I enable HTTPS for the embedded tomcat in Denodo?
I'd like to enable https for all my incoming web requests to Denodo using a self-signed certificate. How do I do this?
(Denodo comes installed with an embedded JRE and Tomcat)
(I'm posting this question and including the answer in hopes that someone else finds it useful)
c# - 如何创建包含分组的自定义(平面)集合?
我正在使用 WPF DataGrid 和 .Net 4.5,并且正在尝试为大型集合滚动我自己的数据虚拟化容器。我已经在网上找到了许多有用的例子来说明如何实现数据虚拟化,但是在我看到的每个例子中,如果你进行任何分组,节省的费用就会丢失。我的分组是简单而静态的。有没有办法在 WPF 中伪造分组,这样我的集合就不必提前枚举所有项目?例如,有没有人覆盖ListCollectionView
's并在每个组的开头GetItemAt()
返回一个对象?CollectionViewGroup
具体示例:
- 例如,我有一个包含 10 万条记录的数据库。我想创建一个类似于Bea Stollnitz 示例的数据虚拟化集合,并在 WPF DataGrid 中使用它。
- 我想在一个字段上对 DataGrid 中的项目进行分组,但我可以通过修改我的数据库查询来做到这一点,首先返回组 A 中的所有项目,然后返回组 B 中的所有项目。分组甚至在 DataTable 看到它之前就完成了。
- 即使我的集合(从 DataGrid 的角度来看)是扁平的,我如何直观地表示 WPF DataGrid 内的分组?我发现在 DataGrid 中显示分组的唯一方法是使用 CollectionView 或类似方法。
.
c# - 组合框虚拟化问题
当我将虚拟化设置为真时,我遇到了一个奇怪的问题,例如组合框样式,我有一个选中的组合框来检查组合框项目中的所有复选框。
在 ItemsPanel 属性中,我使用 VirtualizingStackPanel 进行了一些自定义样式,如下所示
但是在滚动视图之前和之后,它是不同的。
例如,在这里我尝试在向下滚动项目面板后获取组合框的第一个项目
但是,我在这里得到的只是 NULL。
那么无论如何我们可以使用虚拟化来实现这一点吗?(我知道它已经在虚拟化了!)。或者我们应该摆脱虚拟化并考虑另一种解决方案。我们看到,如果没有虚拟化属性,组合框的加载速度非常慢。
有什么想法吗?
提前致谢!:)
jboss - Apche JENA 与数据虚拟化工具的集成
任何人都在从数据虚拟化层中的虚拟数据库创建的 RDF 模型(使用 R2RML 映射)之上实现了 Apache JENA。我专门寻找与 JBOSS-Teiid、Apache JENA、R2RML 映射的集成。
任何参考或想法分享都会有很大帮助。