【问题标题】:Preloading WPF listview with many items预加载包含许多项目的 WPF 列表视图
【发布时间】:2012-05-03 21:25:53
【问题描述】:

我正在使用 Prism 和 MEF 创建 WPF GUI。我很想知道是否有一种方法可以在用户查看 WPF 控件之前对其进行预填充。

具体来说,我有一个 UserControl,它使用 ListView 显示通过 WCF 网络调用检索到的大约 8000 个项目的列表。

我已经确定瓶颈不是网络调用,而是 ListView 本身的创建。 WPF ShellViewModel 当前执行网络预取,以便所有必需的数据都存在于客户端,但由于我使用 Prism/MEF 的依赖项注入,因此在用户单击包含此 ListView 的选项卡之前不会创建视图,随后在创建 ListView(填充 8K 项)时“冻结”。我怀疑视图依赖项的 LazyLoading 也参与其中。

有没有办法将此 ListView 创建移动到应用程序的引导阶段?我希望在用户单击它之前加载/填充此视图,以便没有“滞后”。

减少要查看的项目数量不是一种选择。

谢谢。

【问题讨论】:

  • 你可以为listview、datatemplate等和你的项目类发布你的xaml

标签: wpf dependency-injection prism mef


【解决方案1】:

试试Virtualization,听起来这正是你需要的。

【讨论】:

  • 默认情况下列表框是虚拟化的,除非 ItemsPanel 指定了非虚拟化面板。
  • 谢谢,塞巴斯蒂安。我没有听说过 WPF 提供的这种功能。看起来效果不错。
【解决方案2】:

试试这个

<ListView ItemsSource="{Binding Your8kCollection}">
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
               <VirtualizingStackPanel />
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        ...
 </ListView>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2019-10-13
    相关资源
    最近更新 更多