为 Data Standard 对话框创建多个组合框(也称为选择列表),其中下一个组合框取决于在第一个组合框中所做的选择。
当在第一个框中选择了值时,下一个框应基于选择的第一个值来显示值。例如,您有两个组合框:一个显示汽车公司名称(BMW、Mercedes、Ferrari 等),第二个显示选定公司的汽车类型(对于 BMW:1、2、5、X2、X5……;对于 Mercedes:A、B、C、CL、CLS……)。
创建组合框分为四个部分。
创建数据源
您需要从其获取数据以填充组合框的源。由于 WPF 附带了原生 XML 引擎,因此您可以创建包含数据的 XML 文件。该 XML 文件包含用于第一次选择的第一级内容。每个条目都具有用于第二次选择的子条目。如果您需要第三级或更多嵌套的选择列表,这些第二级条目甚至可以具有更多子条目。
这看起来如下所示:

创建 data.xml 文件,将此内容复制到该文件,然后将该文件保存到所需位置(在本例中,将 Data.xml 文件保存到 C:\Temp)。
将 data.xml 作为资源添加到 Data Standard .xaml 文件。这使得组合框可以使用数据。
将下列行添加到 .xaml 文件中的资源部分:
<XmlDataProvider x:Key="comboDataSource" Source="C:\Temp\data.xml"/>
整个资源部分看起来如下所示:
<WPF:DSWindow.Resources xmlns:prop="clr-namespace:dataStandard.UI.View;assembly=dataStandard.UI">
...
<XmlDataProvider x:Key="comboDataSource" Source="C:\Temp\data.xml"/>
</WPF:DSWindow.Resources>
新资源命名为 comboDataSource 并且路径指向 data.xml。
现在,创建组合框,并让它们指向 XML 中的第一级数据和相应的第二个级数据。
以下是第一个组合框的示例:
<ComboBox x:Name="ComboCarCompanies" Grid.Column="1" Grid.Row="6"
ItemsSource="{Binding Source={StaticResource comboDataSource}, XPath=Data/Companies/Car}" Text="{Binding Prop[CarType].Value}"
DisplayMemberPath="@Type" SelectedValue="{Binding Prop[CarType].Value}" SelectedValuePath="@Type"/>
第一个组合框的 Source 设置为我们之前定义的 StaticResource-comboDataSource。
第二个组合框如下所示:
<ComboBox x:Name="ComboCarType" Grid.Column="1" Grid.Row="7"
ItemsSource="{Binding SelectedItem, ElementName=ComboCarCompanies}" Text="{Binding Prop[CarType].Value}"
DisplayMemberPath="@Type" SelectedValue="{Binding Prop[CarType].Value}" SelectedValuePath="@Type"/>
我们示例中的大部分属性与第一个组合框中的属性起着相同的作用。实际的区别在于 ItemSource。在此示例中,ItemSource 来自第一个组合框(称为 SelectedItem)的 ComboCarCompanies。
定义特性定义 CarType 和 Car:在 Inventor.cfg 或 AutoCAD.cfg 中(具体取决于您在本例中使用的工具),为 CarType 和 Car 添加特性定义。有关如何在配置文件中添加特性定义的说明,请参见此处。
保存更改并查看对话框。