WPF,XML数据绑定到依赖/级联combobox

我有一个XML文件,具有以下结构:

       ...more SubComponent nodes...   ...more Component nodes...   ...more Product nodes...  

我正在尝试创建一个WPF应用程序,其中包含带有产品名称的ComboBox。 我是WPF的新手,所以我不知道我是不是以正确的方式做事。 选择产品时,应使用该产品的所有组件填充第二个ComboBox。 选择Component时,应该使用该Component的所有SubComponents填充第三个ComboBox。

我不知道如何在ComboBox之间建立依赖关系,除了在独立的ComboBox触发的事件处理程序中填充依赖的ComboBox。 这似乎暗示我需要能够在C#中读取XML,因此我有[Serializable]类用于ProductsProductComponentSubComponent 。 但是,我试图在我的XAML中进行XML数据绑定:

    

我目前没有在我的第一个ComboBox中看到产品名称列表,其XAML如下:

  

Products XML应该是只读的 – 用户将无法从应用程序更改XML中的任何值。 我只想阅读XML数据并在应用程序中显示它。

我有几个问题:

  1. 我正确地谈到这个吗? 拥有我的WPF应用程序读取的独立XML文件,具有[Serializable]类,表示XML文件中的节点,以便从C#中的那些节点提取数据,使用事件处理程序编写ComboBox之间的依赖关系等。
  2. 为什么我的产品名称(例如MyProduct1)不会显示在我的ComboBox中? 目前它只显示为空。
  3. 看起来几乎像用于表示我的XML节点的[Serializable]类是冗余/不必要的,因为XAML已经有了XmlDataProvider / XPath的东西。 是这样的吗?

编辑:

将我的ComboBox XAML更新为以下内容,现在我在ComboBox中看到了产品名称列表,感谢decyclone的回答 :

  

ItemsSource属性应设置为要在列表中显示的项的集合,在您的情况下是XmlDataProvider 。 用户StaticResource定位它,因为它被定义为资源。 应使用DisplayMemberPath属性来选择应使用哪个属性来显示combobox中的文本。

关于你的第一个(和3个)问题,我个人喜欢创建类而不是使用原始XML。 它给我带来的好处很少

  • 添加包装器属性。 例如,FullName = FirstName +“”+ LastName属性。

  • 每次我想访问值(总是字符串)时,我不必检查空值和类型安全性。

  • 我可以添加自己的行为作为方法,这对于完成小任务非常有用。

  • 控制序列化方法并使用属性在其中注入自定义逻辑。

关键是,值得吗? 你真的关心这些好处吗? 这就像在DataReader和DataSet之间进行选择一样。 对于readonly和displaylyly目的,使用原始XML,如果你打算玩它很多,使用类。

好的,既然我找到了一个更具体问题的答案,我想我也知道这个问题的答案。 我不需要[Serializable]类用于我的XML中的不同节点,因为我可以使用XAML和XPath来创建级联/依赖的ComboBoxes: