ComboBox在WPF中绑定到XML

时间:2014-04-01 15:32:53

标签: c# xml wpf xaml data-binding

我知道这个问题已经被要求死亡,但是我已经尝试了很多建议的答案,当我在VS2013中启动WPF时,组合框仍然没有填充。在这里。我有一个名为People.xml的XML文档,格式如此......

<?xml version="1.0" encoding="utf-8"?>
<People>
  <Person>
    <personName>John Doe</personName>
    <personEmail>someone@yahoo.com</personEmail>
    <personReports>List of reports they get go here.</personReports>
</Person>

在应用程序的App.xml部分中,我将此作为资源:

<XmlDataProvider x:Key="People" Source="\DataSources\People.xml" XPath="People" IsInitialLoadEnabled="True" />

然后,在组合框的XAML中,我将其列为:

<ComboBox x:Name="employeeNameBox" IsReadOnly="False" HorizontalAlignment="Left" IsEditable="True" ItemsSource="{Binding Source={StaticResource People}, XPath=./Person/personName}">

我想要了解的是使用XML文档中的所有personName元素填充组合框。

同样,我尝试了几种不同的方法来尝试加载它,并且组合框总是空的。我对数据绑定结构和WPF一般都比较新,所以我能得到的任何帮助都会很棒。

谢谢!

1 个答案:

答案 0 :(得分:0)

至于我,最简单的方法是XmlSerializer

public class Person
{
    public string personName;
    public string personEmail;
    public string personReports;
}

public class People
{
    [XmlElement("Person")]
    public List<Person> Persons;
}

加载数据:

var people = (People)new XmlSerializer(typeof(People)).Deserialize(stream);
employeeNameBox.ItemsSource = people.Persons;

ComboBox代码:

<ComboBox x:Name="employeeNameBox" IsReadOnly="False" HorizontalAlignment="Left" IsEditable="True" DisplayMemberPath="personName">