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

本文关键字:动态 列表 按钮 xml 事件 带有 | 更新日期: 2023-09-27 18:15:07

我正在制作silverlight rss阅读器作为学校项目,我有一个问题。我想在xml中定义提要源列表,并将此xml加载到按钮列表中,每个按钮对应一个提要。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);
    }
}

按钮内容正在加载,但该提要url是所有按钮在XML中的最后一个。你能告诉我哪里做错了吗?

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

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

试试这个:

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

Eric Lippert已经写了关于这个话题的博客:

  • 关闭被认为有害的循环变量
  • 关闭循环变量,第二部分