示例 - 为 Data Standard 对话框创建级联组合框

为 Data Standard 对话框创建多个组合框(也称为选择列表),其中下一个组合框取决于在第一个组合框中所做的选择。

当在第一个框中选择了值时,下一个框应基于选择的第一个值来显示值。例如,您有两个组合框:一个显示汽车公司名称(BMW、Mercedes、Ferrari 等),第二个显示选定公司的汽车类型(对于 BMW:1、2、5、X2、X5……;对于 Mercedes:A、B、C、CL、CLS……)。

创建组合框

创建组合框分为四个部分。

  1. 创建数据源

    您需要从其获取数据以填充组合框的源。由于 WPF 附带了原生 XML 引擎,因此您可以创建包含数据的 XML 文件。该 XML 文件包含用于第一次选择的第一级内容。每个条目都具有用于第二次选择的子条目。如果您需要第三级或更多嵌套的选择列表,这些第二级条目甚至可以具有更多子条目。

    这看起来如下所示:

    创建 data.xml 文件,将此内容复制到该文件,然后将该文件保存到所需位置(在本例中,将 Data.xml 文件保存到 C:\Temp)。

  2. 将 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。

  3. 现在,创建组合框,并让它们指向 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

  4. 定义特性定义 CarTypeCar:在 Inventor.cfg 或 AutoCAD.cfg 中(具体取决于您在本例中使用的工具),为 CarTypeCar 添加特性定义。有关如何在配置文件中添加特性定义的说明,请参见此处。

    注意:自 VDS 2019 起,可以省略此步骤,因为 VDS 会在内部创建特性定义(如果本不存在)。
  5. 保存更改并查看对话框。