WPF ListBox和大量数据

时间:2014-07-04 13:01:52

标签: c# wpf listbox

我需要在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>

1 个答案:

答案 0 :(得分:0)

我不确定这是否适用或者您正在寻找这个,但虚拟化数据是您可以研究的另一个解决方案。有一些很好的帖子描述了这一点。这两篇博客/帖子似乎非常好。请看这里[http://www.codeproject.com/Articles/34405/WPF-Data-Virtualization]和此处[http://www.zagstudio.com/blog/498#.U7a6OvldV1F]