【问题标题】:How to async load and bind XML data to TreeView?如何异步加载 XML 数据并将其绑定到 TreeView?
【发布时间】:2012-01-30 16:36:42
【问题描述】:

我使用以下代码将 XML 文件绑定到 WPF TreView:

XmlDocument XMLdoc = new XmlDocument();
try
{
     XMLdoc.Load(file);
     XmlDataProvider provider = new XmlDataProvider();
     provider.Document = XMLdoc;
     Binding binding = new Binding();
     binding.Source = provider;
     binding.XPath = "child::node()";
     xmlTree.SetBinding(TreeView.ItemsSourceProperty, binding);
}
catch (XmlException)
{
  MessageBox.Show("The XML file is invalid");
  return;
}

我不能说 XML 太大,但是在 WPF TreeView 下绑定和显示 XML 数据需要花费超过 1 分钟的时间。

我的问题是:我们有什么可以优化的地方吗?

(注意:最终的想法是在 WPF App 下显示 XML。)

【问题讨论】:

  • XML 文件大约有多大?
  • @ErikDietrich。它是 138Kb。每个项目至少有 4-6 个级别。
  • 如果最终的想法只是“显示XML”(不进行编辑),那么选择另一种方法会更好吗?
  • @jberger。嗯...我不知道其他方法... :) 你能准确指出你的意思吗?

标签: c# .net wpf xml xaml


【解决方案1】:

我遇到了同样的问题,并通过将 TreeView 属性“VirtualizingStackPanel.IsVirtualizing”设置为“true”来解决它。

【讨论】:

    【解决方案2】:

    没有代码和XML文件在我面前,我只能通过这里的东西,我看到的是你首先将一个有点复杂和大的XML文件加载到内存中,然后将GUI绑定到它是第二个,所有顺序。

    在某些时候,您将不得不为那些昂贵且耗时的操作支付费用,但您至少可以让您的 GUI 在加载时做出响应。我会调查使用BackgroundWorker 进行加载,甚至可能是绑定(这是我需要查看更多内容才能确定的地方)。

    这里有一个blog post,它讨论了 XMLDataProvider 和后台工作者,尽管上下文与您的上下文略有不同。无论如何,它应该给你一些工作。这里的一般主题是您希望进行昂贵的操作并在后台执行它们而不阻塞所有进度,以便至少您的 GUI 可以响应用户。也就是说,您可以让 GUI 显示进度条、沙漏鼠标图标等,同时进行昂贵的加载和绑定。

    【讨论】:

    • 谢谢!也许您忘记将链接放在“这是一篇博客文章”之后...请您编辑您的答案吗?
    • 我对其进行了编辑并内联 - 点击“博客文章”将带您到那里。
    • 如果这是公认的答案,则问题标题不合适。 “如何异步加载 XML 数据并将其绑定到 TreeView?”“如何将大量 XML 数据加载并绑定到 TreeView?”
    猜你喜欢
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2011-07-06
    • 2021-08-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多