2011-04-08 52 views
0

我有一个简单的XML文档:如何获取要在WPF组合框中显示的XML属性?

<?xml version="1.0" encoding="utf-8" ?> 
    <languages default="en"> 
    <language code="en" name="English" /> 
    <language code="de" name="Deutsch" /> 
    <language code="es" name="Espanol" /> 
    <language code="fr" name="Français" /> 
</languages> 

language节点我已经声明为ItemsSource在C#中的组合框:

userLanguageComboBox.ItemsSource = languagesXml.Descendants("language"); 

组合框显示被定义为这样的XAML :

<ComboBox Name="userLanguageComboxBox" DisplayMemberPath="@name" /> 

问题是,ComboBox生成四个空条目,它似乎没有找到属性(如果我l屋檐出DisplayMemberPath财产,四个language节点显示为文本):

Screenshot of the Combobox

我该如何解决这个问题?

(我使用.NET 4.0。)

+0

什么您使用的.Net版本?如果您使用.Net 3.5或更高版本,LINQ to XML将成为一个很好的候选人? – tomasmcguinness 2011-04-08 10:44:23

+0

@tomasmcguinness他确实将Linq用于XML,因为“Descendants”是“XContainer”中的一种方法。 – 2011-04-08 10:58:38

+0

谢谢MikeEast。所以对你的查询的一个小改动应该可以解决问题 - languagesXml.Elements(“language”)。Attributes(“name”)select n; – tomasmcguinness 2011-04-08 11:02:04

回答

3

使用LINQ到XML你可以使用所有的name属性:

var names = from n in XElement.Load("xml.xml").Elements("language").Attributes("name") select n.Value; 

这个绑定到ComboBox

userLanguageComboBox.ItemsSource = names; 
+0

谢谢,那差不多就是这样。我必须对'n.Value'进行选择,并移除DisplayMemberPath以使其工作。 – 2011-04-08 11:44:03