我需要在ListBox中显示大量数据(数千个项目),但是它需要一些时间,并且在整个项目显示在ListBox中之前UI不响应。
ListBox的ItemsSource绑定到CollectionView。
我知道使用VirtualizingStackPanel的好处,但我坚持使用WrapPanel。
我通过互联网搜索并发现了一些VirtualizedWrapPanels,但他们有同样的问题,即他们不允许VirtualizingWrapPanel增长到它喜欢的任何大小,我必须为它们设置宽度和高度。
现在我需要知道还有哪些其他选项供我工作?我可以做什么,以便ListBox加载并快速显示这么大的数量。
如果我没有解释,请告诉我 问题很清楚。 任何帮助表示赞赏。提前谢谢。
修改
这是相关代码
public ObservableCollection<T> Items
{
get { return _items; }
set
{
if (_items == value)
return;
_items = value;
OnPropertyChanged(() => Items);
}
}
我在ViewModel的LoadData方法中实例化ObservableColelction
_items = _service.Select();
并以这种方式实例化CollectionView
ICollectionView cv = new CollectionViewSource() { Source = Items }.View;
和ListBox的xaml代码
<ListBox
x:Name="Items"
ItemsSource="{Binding CollectionView}"
Padding="10,10,10,10"
SelectionMode="Single"
VerticalAlignment="Top"
IsSynchronizedWithCurrentItem="True">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" Height="480" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
答案 0 :(得分:0)
我不确定这是否适用或者您正在寻找这个,但虚拟化数据是您可以研究的另一个解决方案。有一些很好的帖子描述了这一点。这两篇博客/帖子似乎非常好。请看这里[http://www.codeproject.com/Articles/34405/WPF-Data-Virtualization]和此处[http://www.zagstudio.com/blog/498#.U7a6OvldV1F]。