如何异步加载和绑定XML数据到TreeView?

时间:2012-01-30 16:36:43

标签: c# .net wpf xml xaml

我使用以下代码将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。)

2 个答案:

答案 0 :(得分:1)

如果没有代码和XML文件在我面前,我只能按照这里的内容进行操作,而我所看到的是您首先将一个有点复杂的大型XML文件加载到内存中,然后将GUI绑定到第二,所有顺序。

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

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

答案 1 :(得分:1)

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