2012-01-30 48 views
1

我XML文件綁定使用WPF t檢討此代碼:如何異步加載和綁定XML數據到TreeView?

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是太大,但它需要大量的時間超過1分鐘綁定並顯示在WPF TreeView的XML數據。

我的問題是:有沒有我們可以優化的任何要點?

(注:最終的想法是要表明在WPF應用XML)

+0

XML文件有多大? – 2012-01-30 17:03:07

+0

@ErikDietrich。它是138Kb。每個項目至少有4-6個級別。 – Terminador 2012-01-30 17:07:04

+0

如果最終的想法只是「顯示XML」(不需要編輯),那麼選擇一種替代方法會更好嗎? – 2012-01-30 17:16:45

回答

1

我有同樣的問題,並通過將TreeView屬性「VirtualizingStackPanel.IsVirtualizing」設置爲「true」來解決它。

1

而不必在我前面的代碼和XML文件,我只能通過什麼何去何從,和我所看到的是,您首先將一個稍微複雜的大型XML文件加載到內存中,然後再將所有GUI依次綁定到它。

在某些時候,您將不得不依靠昂貴且耗時的操作來支付吹笛者,但您至少可以在GUI加載時使GUI響應。我會調查使用BackgroundWorker加載,甚至可能綁定(這是我需要更多地看待肯定)。

下面是一個討論XMLDataProvider和Background worker的blog post,雖然與您的情況略有不同。無論如何,它應該給你一些工作。這裏的一般主題是您想要花費昂貴的操作並在後臺執行操作,而不會阻止所有進度,因此至少您的GUI可以響應用戶。也就是說,你可以讓GUI顯示進度條,沙漏鼠標圖標等,而昂貴的加載和綁定發生。

+0

謝謝!也許你忘了把鏈接放在「這是一篇博客文章」之後......你能編輯你的答案嗎? – Terminador 2012-01-30 17:21:44

+0

我編輯並內聯 - 點擊「博客文章」將帶你到那裏。 – 2012-01-30 17:25:17

+0

如果這是被接受的答案,那麼問題標題是不恰當的。 **「如何異步加載和綁定XML數據到TreeView?」**或**「如何加載和綁定巨大的XML數據到TreeView?」** – 2012-01-30 18:21:31