问题标签 [virtualizingstackpanel]

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 回答
1123 浏览

wpf - VirtualizingStackPanel 如何决定何时卸载(处置?)虚拟化控件?

我正在使用其 ControlTemplate 中的 VirtualizingStackPanel 使用 ItemsControl。在某种程度上,我已经让虚拟化工作了。我已将调试语句放在我的 DataTemplate 中的控件的 Loaded 和 Unloaded 事件处理程序中,但在控件消失后它们不会立即卸载。有没有办法强迫这种行为?

0 投票
2 回答
2090 浏览

silverlight - 使用 ItemsControl 和 VirtualizingStackPanel 的“BindingExpression 路径错误”

我在 Windows Phone 7 上使用 Silverlight。

使用 VirtualizingStackPanel 时收到大量“BindingExpression 路径错误”调试消息是否正常?我认为它正在发生,因为视觉项目在回收时暂时与数据项目集合解除绑定......

我有一个 ItemsControl,它的 ItemsPanel 的 ItemsPanelTemplate 是一个 VirtualizingStackPanel。它绑定到我的 ViewModel 上的“Notes” ObservableCollection。

这是在 DataContext 设置为 MainViewModel ViewModel 的 UserControl 中。

ListDataTemplate 包含一个 Button,它本身包含一些文本,数据绑定到 Notes ObservableCollection 中项目的属性:

当我运行我的程序时,一切正常——在任何时候,我的 Notes 集合中只有少数项目被绑定到。但是,当我向上和向下滚动时,会出现很多调试错误:

它正在主视图模型(其 Notes 属性是 ItemsSource)上寻找“Title”属性 - 我认为这是正常的 - 这是一种暂时的情况,因为视觉项目与 Notes 集合中的项目未绑定以便成为通过将它们分配给集合中的另一个项目来回收。

有没有其他人看过这个?我说得对吗?

如果我在 MainViewModel 上创建一个虚拟 Title 属性并设置一个调试断点,那么我会看到这个堆栈跟踪。注意“UnlinkContainerFromItem”:

谢谢,达米安

0 投票
1 回答
755 浏览

wpf - Wpf Xbap TreeView VirtualizingStackPanel 错误?

我有一个带有 VirtualizingStackPanel 的 TreeView。TreeView 有一个“级别 1”TreeViewItem,我将此 TreeViewItem 绑定到一个 10k 项列表。每个孩子也是另一个 TreeViewItem。

虚拟化效果很好,性能也很好,但是有个大问题。假设我在页面顶部并按 Ctrl-End 到底部,浏览器变为空白。如果我稍微滚动鼠标或调整浏览器大小,它会重新出现。

另一个大问题是:当我快速滚动到树的中间或底部时。假设我停在项目编号 5000。然后我无法展开子树视图项,浏览器只显示任何内容,直到我滚动或调整大小。

很感谢任何形式的帮助。以下是示例 xaml 和代码:

我将 Visual Studio 2010 与 .Net 4 一起使用。另外,我确实注意到,如果我在 _level2Template 下设置 TreeViewItem 的高度和宽度,问题就消失了。但是在我的情况下设置高度不是一个选项,因为高度在实际应用程序中会有所不同。

更新:对我来说,这个问题的发生似乎很明显,因为子树视图项的高度可能会有所不同。或许这就是为什么TreeView默认不开启VirtualizingStackPanel,而DataGrid & ListBox默认开启的原因。不用说数据网格或列表框项的高度通常是不变的。

更新:我下载了 Telerik RadTreeView 的免费试用版并测试了虚拟化。这个问题在telerik radtreeview 中根本没有出现。可以多测试一下telerik,然后可能会继续使用它。

0 投票
4 回答
1736 浏览

silverlight - WP7:ListBox 什么时候使用 VirtualizingStackPanel?

每个人都说 ListBox 的默认 ItemsPanel 是 VirtualizingStackPanel。我创建了一个 ListBox 派生类(称为 MyListBox),它默认为 StackPanel。

我的意思是我必须强制虚拟化,例如这样:

我可以在这里重印我的课程,但这不是重点。我想知道一般答案。

该类不会更改预定义的 ListBox 样式,但它使用自己的 ListBoxItem 派生类。

我很确定使用虚拟化有一些条件,因为我的同事说他过去看到过相应的 ListBox 代码。不幸的是,现在我们无法访问 MS dll 的调试版本。

0 投票
1 回答
3287 浏览

c# - Treeview 上的 VirtualizingStackPanel 不是虚拟化

我这里有个问题,我想在 TreeView 中显示一些项目,大约 100.000 个元素。如果我使用默认的 WPF TreeView,一切似乎都可以工作,但如果我使用自定义 TreeView(目前只有一个 ItemsControl),虚拟化似乎不再起作用。在网上进行研究时,我尝试了一些解决方案,但似乎都没有奏效......这是我的 xaml:

这些项目在带有 DataBinding 的 ObservableCollection 中,所以这不应该是问题......但它是什么???

问候,

于尔根

0 投票
2 回答
848 浏览

c# - 虚拟化堆栈面板返回空选定项

我正在使用堆栈面板来显示列表框项目,但是当我决定将其更改为虚拟化面板时,有时所选项目为空。这是我用来调用所选项目命令的 DataTemplate 的一部分:

这是列表框:

如果我关闭虚拟化,则不会发生此问题。如何防止它返回 null 项?

0 投票
2 回答
614 浏览

wpf - VirtualizingStackPanel 不会清除 ItemTemplate 中 TextBoxes 的文本

我有ItemsControlVirtualizingStackPanel作为这样的项目面板:

风格如下:

我将一个包含 100.000 个元素的集合设置为ItemsSource并获得了非常好的性能。一切都很好,除了一件事。当我在其中一个文本框中输入文本然后开始滚动时,我看到该文本出现在整个列表中的任何地方!

我了解VirtualizingStackPanel的作用。它不断加载在我们滚动时变得可见的元素。我了解它的虚拟化技术的某些方面,但我不知道如何理解这种奇怪的行为。我找不到关于 WPF/Silverlight 虚拟化的好文档,所以,请解释一下发生了什么

0 投票
2 回答
1095 浏览

windows-phone-7 - 为 WP7 虚拟化 WrapPanel

我需要和我的 facebook 朋友一起创建一个包装面板,这意味着 itemcount 超过 400,加载所有项目需要 5-10 秒。

这段代码很好,但它将所有元素放在 1 Row ...:

任何想法如何将项目包装添加到 VirtualizingStackPanel 或如何将虚拟化添加到 WrapPanel:

0 投票
1 回答
435 浏览

silverlight - 虚拟化堆栈面板和高度

如果我的滚动查看器中有一个虚拟化堆栈面板,那么我的滚动查看器如何知道滚动条需要的高度?

例如,如果我有 10,000 个项目,它怎么知道我只向下滚动了 5% 的列表?

如果我不知道物品的大小怎么办?

0 投票
1 回答
12824 浏览

.net - 将多选 ListBox 与 MVVM 同步

我有一些数据的两个视图:一个列表视图(ListBox现在是一个,但我一直想切换到ListView)和一个地图上的精美图形表示。在任一视图中,用户都可以单击一个对象,它将在两个视图中被选中。多选也是可能的,因此每个ViewModel实例都有自己的IsSelected属性。

目前我正在绑定ListBoxItem.IsSelectedViewModel.IsSelected,但这仅在ListBox未虚拟化时才能正常工作(请参见此处)。不幸的是,禁用虚拟化会损害性能,并且我的应用程序变得太慢了。

所以我必须再次启用虚拟化。为了保持ViewModel.IsSelected屏幕外项目的属性,我注意到ListBoxListView有一个SelectionChanged事件,我可以(大概)使用它来将选择状态ListBox/ListViewViewModel.

我的问题是,如何反向传播选择状态?的SelectedItems属性ListBox/ListView是只读的!假设用户单击图形表示中的一个项目,但它在列表之外。如果我只是设置ViewModel.IsSelected,那么将不知道新的选择,因此如果用户单击列表中的其他项目,ListBox/ListView它将无法取消选择该项目。我可以打电话ListBox.ScrollIntoViewViewModel但有几个问题:

  • 在我的 UI 中,如果它们以图形方式位于同一位置,则实际上可以一键选择两个项目,尽管它们可能位于ListBox/ListView.
  • 它打破了 ViewModel 的隔离(我的 ViewModel 完全不知道 WPF,我想保持这种状态。)

那么,亲爱的 WPF 专家,有什么想法吗?

编辑:我最终切换到 Infragistics 控件并使用了一个丑陋且相当缓慢的解决方案。关键是,我不再需要答案了。