如何异步加载XML数据并将其绑定到TreeView

本文关键字:绑定 TreeView 数据 XML 何异步 异步 加载 | 更新日期: 2023-09-27 18:21:49

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

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应用程序下显示XML。)

如何异步加载XML数据并将其绑定到TreeView

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

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

在某种程度上,您将不得不为那些昂贵而耗时的操作付出代价,但您至少可以在加载GUI时使其响应。我会研究使用BackgroundWorker进行加载,甚至可能进行绑定(这是我需要更多研究的地方)。

这是一篇关于XMLDataProvider和Background worker的博客文章,尽管与您的上下文略有不同。无论如何,它应该会给你一些工作的机会。这里的总主题是,您希望采取昂贵的操作,并在后台进行这些操作,而不会阻碍所有进度,这样至少您的GUI可以对用户做出响应。也就是说,您可以让GUI显示进度条、沙漏鼠标图标等,同时进行昂贵的加载和绑定。