2011-10-20 22 views
0

我有一個文本框,當它的內容發生變化時,我想查詢xml文件中與文本框中的文本匹配的元素並將結果顯示在列表框中。WPF XAML LINQ:如何只加載一次xml文件?

我當前的代碼是:

private void textBox1_TextChanged(object sender, TextChangedEventArgs e) 
    { 
     var xElem = XElement.Load("ProductTable.xml"); 
     ... 

我應該如何代碼,以便裝入只調用一次?按原樣,每次輸入按鍵時,都會(重新)加載xml文件。謝謝。

+1

您可以創建一個實例變量,延遲加載(或沒有)。你還需要什麼? – jv42

+0

爲什麼不使用WPF工具包中的'Autocomplete'文本框,可以在輸入時提供建議。它也可以使用XML數據源(任何數據源)... http://diptimayapatra.wordpress.com/2010/03/05/auto-complete-box-in-wpf-toolkit/ –

回答

4

xElem移動到您的班級領域。然後在nullTextChanged處理程序檢查:

class MyControl : UserControl 
{ 
    XDocument productTableDocument; 

    private void textBox1_TextChanged(object sender, TextChangedEventArgs e) 
    { 
     if (productTableDocument == null) 
     { 
     productTableDocument = XDocument.Load("ProductTable.xml"); 
     } 
     // continue working with not null productTableDocument 
    } 
} 
+0

當然,如果你的XML可能變得陳舊,如果你需要異步加載它,如果你需要在精確的點上回收內存等等,那麼你可能想要增加大量的複雜性。 – jv42

+0

但是這是一個很直接的事情。 – jv42