2011-04-30 17 views
0

我已经将LINQ to XML模型放在了一起,后面跟着ScottGu's Tutorial,它返回一个RSS提要,然后我可以使用foreach循环从数据中提取数据相同的.cs文件。传递一个类别中的项目以用于另一种形式

然后我把它放到它自己的类中,就像从代码中调用一样,但是我无法从我的其他页面访问“条目”来执行ForEach循环。我对此很新,想知道我需要写些什么?

继承人我的rss阅读器(从scotts松散建造)在其自己的.cs文件。我可以访问DataAnswerFeed,但不能访问“var items”。我需要一种方法来返回值吗?

public class DataAnswerFeed 
    { 
     public string AnsID { get; set; } 
     public string AnsQueID { get; set; } 
     public string AnsText { get; set; } 
     public string Correct { get; set; } 
    } 
public class AnswerFeed 
{ 

    public AnswerFeed() 
    { 
     WebClient feed = new WebClient(); 
     feed.DownloadStringCompleted += new DownloadStringCompletedEventHandler(feed_DownloadStringCompleted); 
     feed.DownloadStringAsync(new Uri("http://myRssFeed.xml")); 
    } 

    private static readonly XNamespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"; 

    public void feed_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     XElement uri = XElement.Parse(e.Result); 
     var items = (from item in uri.Descendants(m + "properties") 
        select new DataAnswerFeed() 
        { 
         AnsID = item.Descendants().ToList()[0].Value, 
         AnsQueID = item.Descendants().ToList()[1].Value, 
         AnsText = item.Descendants().ToList()[2].Value, 
         Correct = item.Descendants().ToList()[3].Value 
        }).ToList(); 

    } 
} 

}

在我的其他网页我写DataAnswerFeed资讯供稿=新DataAnswerFeed(); 然后我试图运行ForEach循环的方式与我在类中的方式相同,但得到一个错误,指出“GetEnumerator”没有公共定义?

宣布newFeed后,我的foreach在一个单独的虚空。

public void testPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     // ForEach loop on the list 
     foreach (DataAnswerFeed a in newFeed) 
     { 
      //Show test data to check working 
      MessageBox.Show(a.AnsText); 
     } 

    } 

谢谢...

+0

这是什么类型?这是一个错字,你的意思是'这个'而不是? – thumbmunkeys 2011-04-30 16:48:59

+0

对不起,这只是一般符号,因为我宣布newFeed ...这应该阅读newFeed – beat145 2011-04-30 17:18:38

+0

恐怕你目前的做法不会工作,因为你异步检索饲料,即使你公开列表建议下面。 Silverlight的方式是更新一个模型属性,然后由某个UI元素使用 - 你不应该直接在接收到的数据上直接循环。 – BrokenGlass 2011-04-30 17:35:41

回答

0

添加到您的AnswerFeed

public static List<DataAnswerFeed> Answers = new List<DataAnswerFeed>(); 

然后将查询结果分配给它

Answers = (from item in uri.Descendants(m + "properties") ... 

testPage_Loaded

foreach (DataAnswerFeed a in AnswerFeed.Answers) 

这不是很好有静力学,但它会工作;)

+0

谢谢。这通过了价值,所以我可以看到它,但它给了我作为一个列表与计数0项目,所以没有数据传递。 正在使用ToList();在我的选择查询的结尾足以将它传递给Answers? – beat145 2011-04-30 17:27:59

+0

是的,它应该是,你确定feed_DownloadStringCompleted被执行,然后你显示答案? – thumbmunkeys 2011-04-30 17:35:34

+0

我的代码与上面的一样,并提供了您的修改。它在我有了下面的forEach时起作用,所以也许是因为我的其他页面? 我使用 “的foreach(在AnswerFeed.Answers DataAnswerFeed一) {// 显示测试数据,以检查工作 MessageBox.Show(a.AnsText);} ” ,我应该宣布什么班什么?这可能是 – beat145 2011-04-30 17:43:53

相关问题