我有以下结构的XML文件:WPF,XML数据绑定到依赖/级联组合框
<Products>
<Product name="MyProduct1">
<Components>
<Component name="MyComponent1">
<SubComponents>
<SubComponent name="MySubComponent1"/>
<SubComponent name="MySubComponent2"/>
...more SubComponent nodes...
</SubComponents>
</Component>
...more Component nodes...
</Components>
</Product>
...more Product nodes...
</Products>
我试图创建一个具有与它的产品名称组合框一个WPF应用程序。我对WPF完全陌生,所以我不知道我是否以正确的方式处理事情。选择产品时,应该使用该产品的所有组件填充第二个组合框。当选择一个组件时,第三个组合框应该填充该组件的所有子组件。
我不知道如何设置组合框之间的依赖关系,除了在由独立组合框触发的事件处理程序中填充依赖组合框之外。这似乎意味着我需要能够读取C#中的XML,所以我有[Serializable]
类Products
,,Component
和SubComponent
。不过,我试图做XML数据绑定在我的XAML:
<Window.Resources>
<XmlDataProvider Source="Products.xml"
XPath="Products/Product"
x:Key="productsXml"/>
</Window.Resources>
我目前不在我的第一个组合框看到产品名称的列表,其XAML如下:
<ComboBox Height="23" HorizontalAlignment="Left" Margin="138,116,0,0"
Name="cbo_product" VerticalAlignment="Top" Width="120"
ItemsSource="{Binding Source=productsXml, [email protected]}"
SelectionChanged="product_SelectionChanged"/>
的产品XML应该是只读的 - 用户将无法从应用程序更改XML中的任何值。我只想读取XML数据并将其显示在应用程序中。
我有几个问题:
- 我要对这个正确?拥有一个独立的XML文件,我的WPF应用程序可以读取这些文件,其中包含表示XML文件中节点的类,用于从C#中的这些节点提取数据,使用事件处理程序编写ComboBox之间的依赖关系等。
- 我的产品名称(例如MyProduct1)是否显示在我的ComboBox中?目前它只显示为空。
- 看起来好像有
[Serializable]
类代表我的XML节点是多余/不必要的,因为XAML已经有了XmlDataProvider
/XPath的东西。是这样吗?
编辑:
更新我的组合框的XAML以下,现在我看到在ComboBox我的产品名称的列表,这要归功于decyclone's answer:
<ComboBox Height="23" HorizontalAlignment="Left" Margin="138,116,0,0"
Name="cbo_product" VerticalAlignment="Top" Width="120"
ItemsSource="{Binding Source={StaticResource productsXml}}"
DisplayMemberPath="@name"
SelectionChanged="product_SelectionChanged"/>
这里是如何做到这一点的好例子。 http://msdn.microsoft.com/en-us/library/system.windows.data.xmldataprovider.aspx – decyclone 2010-08-02 14:43:40
这回答了我的问题2)。 :) 谢谢! – 2010-08-02 15:00:13