【发布时间】:2014-01-06 05:50:32
【问题描述】:
上下文:XAML、WPF、C#。
有一些 XML 数据。 (见下文)。
有一个 ListBox 应该显示节点的 subNodes 的 InnerText (因为还有其他与节点相同级别的子节点)
我通过 news="getTagsbyname("item"); 获得了 XmlNodesList;
我已将 Listbox 的 ItemsSource 设置为 news
但我只想显示标题,而不是里面的所有数据
所以我尝试了 DisplayMemberPath="title";
不幸的是,这不起作用,因为没有“news.title”属性。相反,所需的数据位于 news.ChildNodes[0].InnerText
所以我尝试了 DisplayMemberPath = "ChildNodes[0].InnerText"。显然,这也不起作用。
XmlDocument rss = new XmlDocument();
rss.Load("c:\rss.xml");
XmlElement rc = rss.DocumentElement;
XmlNodeList news = rc.GetElementsByTagName("item");
listbox1.ItemsSource = news;
listbox1.DisplayMemberPath = "ChildNodes[0].InnerText";
因为我不知道如何解决这个问题,所以我切换到 XAML 并使用 XmlDataProvider、DataTemplate 和 Xpath 解决了这个问题:
<XmlDataProvider x:Key="titles" Source="C:\rss.xml" XPath="/rss/channel/item" />
<ListBox Name="listbox1" SelectionChanged="listbox1_SelectionChanged" ItemsSource=" {Binding Source={StaticResource titles}}" >
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding XPath=title}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我的问题是:
如何在 C# 中而不是在 XAML 中完成同样的事情?
因为我希望在文本框(由用户)中指定 rss 链接,例如 rss.Load (textBox1.Text),而不是先在本地保存 .xml 文件。
我的问题是“新闻”是一个列表,数据不是属性或属性,而是成员的属性,即 news.ChildNodes[0].InnerText。以及访问它的语法 - 我不知道如何在 ItemsSource 或 DisplayMemberPath 的字符串中传递它。
我希望我清楚而具体地描述了我的问题。
提前感谢您的宝贵建议。
这是 XML 模型。
<rss>
<channel>
<author>
<title>qwer</title>
<image/>
<link>www</link>
</author>
<item>
<title>header1</title>
<description>abcd</description>
<category>1</category>
</item>
<item>
<title>header2</title>
<description>efgh</description>
<category>2</category>
</item>
</channel>
</rss>
【问题讨论】:
标签: c# xml xaml xpath itemssource