Создание нескольких полей со списками (также называемых списками выбора) для диалоговых окон Data Standard, где следующее поле со списком зависит от выбора, сделанного в первом поле.
При выборе значения в одном поле в следующем поле должны отображаться значения с учетом варианта, выбранного в предыдущем поле. Предположим, имеется два поля со списками: в одном отображаются наименования производителей автомобилей (BMW, Mercedes, Ferrari и т. д.), а во втором — модели автомобилей для выбранного производителя (для BMW — 1, 2, 5, X2, X5, для Mercedes — A, B, C, CL, CLS и т. д.).
Существует четыре этапа создания поля со списком.
Шаг 1. Создание источника данных
Необходим источник, из которого будут поступать данные для заполнения поля со списком. Поскольку в WPF используется внутренний механизм XML, можно создать файл XML, который будет содержать данные. В файле 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
. См. сведения о добавлении определений свойств в файл конфигурации.
Сохраните изменения и просмотрите диалоговое окно.