【发布时间】:2011-08-16 02:52:57
【问题描述】:
我已经按照ScottGu's Tutorial 将 LINQ to XML 模型放在一起,它返回一个 RSS 提要,然后当我将它放在同一个 .cs 文件时,我可以使用 foreach 循环从中获取数据。
然后我将它放入它自己的类中,以便从代码中调用,但我无法从我的其他页面访问“项目”来执行 ForEach 循环。我对此很陌生,想知道我需要写什么?
这是我自己的 .cs 文件中的 rss 阅读器(从 scotts 松散地构建)。我可以访问 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 newFeed = new 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);
}
}
谢谢...
【问题讨论】:
-
这是什么类型的?是不是打错字了,你的意思是
this吗? -
对不起,这只是我宣布 newFeed 时的一般表示法......这应该是 newFeed
-
恐怕您当前的方法根本不起作用,因为您异步检索提要,即使您按照下面的建议公开一个公共列表。 Silverlight 的做法是更新一个模型属性,然后由某些 UI 元素使用 - 首先,您不应该直接循环接收到的数据。
-
啊,我想这似乎是我必须调查的事情。没有意识到异步调用导致了差异!谢谢
标签: c# windows-phone-7