2011-06-05 45 views
1

更新

我正在寫一個Silverlight應用程序,我有以下的類「家」,此一等級讀取.XML文件寫這些給一個列表框。在另一個類中概述我將顯示相同的.xml文件。我知道在類「Home」中編寫相同的代碼是很愚蠢的。河段功能

問題是,如何達到這些數據。

我的問題是如何從另一個類重用方法LoadXMLFile()?

代碼。

//讀取類中的「家」

public void LoadXMLFile() 
    { 
     WebClient xmlClient = new WebClient(); 
     xmlClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(XMLFileLoaded); 
     xmlClient.DownloadStringAsync(new Uri("codeFragments.xml", UriKind.RelativeOrAbsolute)); 
    } 
      private void XMLFileLoaded(object sender, DownloadStringCompletedEventArgs e) 
    {  
     if (e.Error == null) 
     { 
      string xmlData = e.Result; 
      XDocument xDoc = XDocument.Parse(xmlData); 

      var tagsXml = from c in xDoc.Descendants("Tag") select c.Attribute("name"); 

      List<Tag> lsTags = new List<Tag>(); 

      foreach (string tagName in tagsXml) 
      { 
       Tag oTag = new Tag(); 
       oTag.name = tagName; 
       var tags = from d in xDoc.Descendants("Tag") 
             where d.Attribute("name").Value == tagName 
             select d.Elements("oFragments"); 
       var tagXml = tags.ToArray()[0]; 

       foreach (var tag in tagXml) 
       {      
        CodeFragments oFragments = new CodeFragments();       
        oFragments.tagURL = tag.Attribute("tagURL").Value; 
        //Tags.tags.Add(oFragments); 
        oTag.lsTags.Add(oFragments); 

       } 
       lsTags.Add(oTag); 
      } 

      //List<string> test = new List<string> { "a","b","c" }; 
      lsBox.ItemsSource = lsTags; 

     } 
    } 
+0

您的函數下載XML,但不會返回它,所以值就會丟失。不確定它的意義。 – Oded 2011-06-05 19:58:13

+0

這就是整個問題。我不知道如何返回我的.xml文件的結果... – user 2011-06-06 07:55:09

+0

如果你不知道如何編寫一個函數,所以它返回一個值,我認爲你需要選擇一個基本的C#編程書籍。 – Oded 2011-06-06 07:57:41

回答

1

.xml文件創建一個類來讀取XML文件,爲了使用它從您的其他類此引用。說你怎麼稱呼它XmlFileLoader,你會在其他類使用這樣的:

var xfl = new XmlFileLoader(); 
var data = xfl.LoadXMLFile(); 

如果我是你,我會做的LoadXMLFile功能需要Uri參數,使其更具重用性:

var data = xfl.LoadXMLFile(uriToDownload); 
+0

好的。 var xfl = new XmlFileLoader();有什麼區別?和XmlFileLoader()xfl = new XmlFileLoader(); 。而LoadXMLFile()和XMLFileLoaded方法必須返回這些東西嗎? – user 2011-06-05 19:07:03

+0

第一行就像你使用'new WebClient();'在你的函數中做的那樣。它得到一個新的'XmlFileLoader'對象(我只是用它作爲類名的例子)。第二行使用第一行。兩者都應該返回一些東西,否則你將無法使用XML ... – Oded 2011-06-05 19:09:57

+0

我更新了問題。我只需要變量lsTags的值(lsBox是「主頁」中的listBox)。除了爲此創建另一個班級,沒有別的辦法嗎? – user 2011-06-05 19:16:57

0

您可以創建一個類,其唯一職責是加載XML並將其返回,並保留調用LoadXmlFile方法的類來確定如何處理生成的XML。