【问题标题】:Passing an item in a class for use in another form传递一个类中的项目以用于另一种形式
【发布时间】: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


【解决方案1】:

将此添加到您的 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 个项目的列表,所以没有数据可以传递。正在使用 ToList();在我的选择查询结束时足以将其传递给 Answers?
  • 是的,应该是,你确定 feed_DownloadStringCompleted 在你显示答案之前被执行了吗?
  • 我的代码如上,你建议的修改。当我有下面的 forEach 时它起作用了,所以也许是因为我的其他页面?我正在使用“foreach (DataAnswerFeed a in AnswerFeed.Answers) { //Show test data to check working MessageBox.Show(a.AnsText); }”我应该声明哪些类?可能是这样
猜你喜欢
  • 2015-06-23
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2012-03-11
相关资源
最近更新 更多