带有来自xml的事件的动态按钮列表

时间:2011-11-19 19:00:13

标签: c# xml silverlight linq silverlight-4.0

我正在研究silverlight rss阅读器作为学校项目,我有一个问题。 我想在xml中定义feed源列表,并将此xml加载到按钮列表,每个按钮用于一个feed。 xml看起来像

<FeedList>  
  <Feed ButtonContent="HDRip's on RlsLog.net" Url="http://www.rlslog.net/category/movies/hdrip/feed/" />
</FeedList>

我正在使用linq加载此xml并创建按钮

XDocument xdoc = XDocument.Load(string.Format("feeds.xml"));

if (xdoc != null)
{                 
    var feedlist =
        (from l in xdoc.Descendants("Feed")
            select new MyButtons
            {
                 Content = l.Attribute("ButtonContent").Value,
                 FeedUrl = l.Attribute("Url").Value
            }
        ).ToList();

    foreach (MyButtons feedbutton in feedlist)
    {
        Button b1 = new Button();
        b1.Content = feedbutton.Content;
        b1.Click += (s, e) => { feedViewer.LoadFeed(feedbutton.FeedUrl); };
        ButtonPanel.Children.Add(b1);
    }
}

按钮内容正在加载正常,但该提要网址用于所有按钮的xml中的最后一个。你能告诉我我做错了吗?

1 个答案:

答案 0 :(得分:1)

看起来feedbutton被捕获为迭代变量,从而导致在为事件处理程序分配lambda表达式时所描述的行为。

请改为尝试:

MyButtons tempButton = feedbutton;
b1.Click += (s, e) => { feedViewer.LoadFeed(tempButton.FeedUrl); };

Eric Lippert在博客中发表了关于此主题的文章: