我正在研究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中的最后一个。你能告诉我我做错了吗?
答案 0 :(得分:1)
看起来feedbutton
被捕获为迭代变量,从而导致在为事件处理程序分配lambda表达式时所描述的行为。
请改为尝试:
MyButtons tempButton = feedbutton;
b1.Click += (s, e) => { feedViewer.LoadFeed(tempButton.FeedUrl); };
Eric Lippert在博客中发表了关于此主题的文章: