带有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中的最后一个。你能告诉我哪里做错了吗?
看起来feedbutton
被捕获为一个迭代变量,从而导致您在使用lambda表达式分配事件处理程序时所描述的行为。
试试这个:
MyButtons tempButton = feedbutton;
b1.Click += (s, e) => { feedViewer.LoadFeed(tempButton.FeedUrl); };
Eric Lippert已经写了关于这个话题的博客:
- 关闭被认为有害的循环变量
- 关闭循环变量,第二部分